-
Notifications
You must be signed in to change notification settings - Fork 4
/
main.go
125 lines (112 loc) · 3.15 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"strconv"
// "github.com/aws/aws-lambda-go/events"
"github.com/artisoft-io/jetstore/jets/datatable"
"github.com/aws/aws-lambda-go/lambda"
"go.uber.org/zap"
)
// Sample lambda function in go for future needs
type config struct {
AWSRegion string
AWSDnsSecret string
IsValid bool
}
var logger *zap.Logger
var c config
func main() {
// Create logger.
var err error
logger, err = zap.NewProduction()
if err != nil {
panic("failed to create logger: " + err.Error())
}
// Check required env var
c.IsValid = true
c.AWSRegion = os.Getenv("JETS_REGION")
if c.AWSRegion == "" {
logger.Error("env JETS_REGION not set")
c.IsValid = false
}
c.AWSDnsSecret = os.Getenv("JETS_DSN_SECRET")
if c.AWSDnsSecret == "" {
logger.Error("env JETS_DSN_SECRET not set")
c.IsValid = false
}
if !c.IsValid {
logger.Fatal("Invalid configuration, exiting program")
}
// Start handler.
lambda.Start(handler)
}
// apiserver:
// with loaderCommand:
// runReportsCommand := []string{
// "-client", client.(string),
// "-sessionId", sessionId.(string),
// "-reportName", reportName,
// "-filePath", strings.Replace(fileKey.(string), os.Getenv("JETS_s3_INPUT_PREFIX"), os.Getenv("JETS_s3_OUTPUT_PREFIX"), 1),
// }
// with serverCommands:
// runReportsCommand := []string{
// "-processName", processName.(string),
// "-sessionId", sessionId.(string),
// "-filePath", strings.Replace(fileKey.(string), os.Getenv("JETS_s3_INPUT_PREFIX"), os.Getenv("JETS_s3_OUTPUT_PREFIX"), 1),
// }
// status_update arguments:
// map[string]interface{}
// {
// "-peKey": peKey,
// "-status": "completed",
// "file_key": "...",
// "failureDetails": {...}
// }
// fileKey is optional, needed for cpipes api notification
func handler(ctx context.Context, arguments map[string]interface{}) (err error) {
logger.Info("Starting in ", zap.String("AWS Region", c.AWSRegion))
ca := datatable.StatusUpdate{
Status: arguments["-status"].(string),
}
v, err := strconv.Atoi(arguments["-peKey"].(string))
if err != nil {
logger.Error("while parsing peKey:", zap.NamedError("error", err))
return err
}
ca.PeKey = v
switch failureDetails := arguments["failureDetails"].(type) {
case string:
ca.FailureDetails = failureDetails
case map[string]interface{}:
var details map[string]interface{}
if err = json.Unmarshal([]byte(failureDetails["Cause"].(string)), &details); err != nil {
ca.FailureDetails = failureDetails["Cause"].(string)
} else {
b, _ := json.MarshalIndent(details, "", " ")
ca.FailureDetails = string(b)
}
default:
fmt.Println("Unknown type for failureDetails")
}
fileKey := arguments["file_key"]
if fileKey != nil {
ca.FileKey = fileKey.(string)
}
fmt.Println("Got peKey:",ca.PeKey,"fileKey:", fileKey,"and failureDetails:", ca.FailureDetails)
errors := ca.ValidateArguments()
for _, m := range errors {
logger.Error("Validation Error:", zap.String("errMsg", m))
}
if len(errors) > 0 {
panic("Invalid arguments")
}
err = ca.CoordinateWork()
if err != nil {
logger.Error("while updating status (ca.CoordinateWork()):", zap.NamedError("error", err))
return err
}
return
}