Skip to content

Commit 1262bac

Browse files
committed
C Runtime CDK is the one and only integration
1 parent 9e79755 commit 1262bac

File tree

25 files changed

+13
-1541
lines changed

25 files changed

+13
-1541
lines changed

.gitignore

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,5 @@ _out/
1313

1414
## Generated from go generate / build
1515
main.h
16-
gogreengrass
17-
glue.go
18-
glue.py
1916
*.so
20-
*.o
21-
22-
## Python temp stuff
23-
__pycache__
24-
*~
17+
*.o

Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,4 @@ install: build
88
@go install
99

1010
clean:
11-
@rm -f gogreengrass glue.go glue.py
12-
@rm -rf greengrasssdk
11+
@rm -rf generated.go

generated.go

Lines changed: 0 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -1,165 +1,4 @@
11
package main
22

3-
var glueGo = []byte(`package main
4-
5-
/*
6-
typedef void (*publish) (char* topic, char *policy, char *payload);
7-
typedef void (*getThingShadow) (char* thingName);
8-
typedef void (*updateThingShadow) (char *ctx, char* thingName, char *payload);
9-
typedef void (*deleteThingShadow) (char *ctx, char* thingName);
10-
typedef void (*get_secret) (char *ctx, char* id, char *version, char *stage);
11-
*/
12-
import "C"
13-
14-
import (
15-
"github.com/mariotoffia/gogreengrass/sdk"
16-
)
17-
18-
// GGDataplane is the functions to for dataplane against GGC API
19-
var GGDataplane sdk.DataplaneClient
20-
21-
// GGSecretsManager is the functions for retrieving secrets via GGC API
22-
var GGSecretsManager sdk.SecretsManager
23-
24-
//export initcb
25-
func initcb(
26-
fnPublish C.publish,
27-
fnGetThingShadow C.getThingShadow,
28-
fnUpdateThingShadow C.updateThingShadow,
29-
fnDeleteThingShadow C.deleteThingShadow,
30-
fnGetSecret C.get_secret) {
31-
32-
GGDataplane = sdk.NewDataplaneClient(
33-
fnPublish,
34-
fnGetThingShadow,
35-
fnUpdateThingShadow,
36-
fnDeleteThingShadow)
37-
38-
GGSecretsManager = sdk.NewSecretsManagerClient(fnGetSecret)
39-
40-
}
41-
42-
//export setup
43-
func setup() {
44-
once()
45-
}
46-
47-
//export set_process_buffer
48-
func set_process_buffer(ctx *C.char, buffer *C.char) {
49-
sdk.SetProcessBuffer(C.GoString(ctx), C.GoString(buffer))
50-
}
51-
52-
//export invokeJSON
53-
func invokeJSON(context string, payload string) *C.char {
54-
return C.CString(sdk.InvokeJSON(context, payload))
55-
}
56-
`)
57-
58-
var gluePy = []byte(`from ctypes import *
59-
import json
60-
61-
# you need to copy sdk to folder greengrasssdk
62-
import greengrasssdk
63-
64-
class GoString(Structure):
65-
_fields_ = [("p", c_char_p), ("n", c_longlong)]
66-
67-
# Creating a greengrass core sdk client
68-
client = greengrasssdk.client("iot-data")
69-
sm = greengrasssdk.client("secretsmanager")
70-
71-
# Load your library that you've built with
72-
# go build -o main.so -buildmode=c-shared main.go init.go
73-
lib = cdll.LoadLibrary("./main.so")
74-
lib.invokeJSON.restype = c_char_p
75-
76-
# The actual function that you need to bind the lambda entry point to
77-
def function_handler(event, context):
78-
result = invokeJSON(context, event)
79-
return result
80-
81-
82-
@CFUNCTYPE(None, c_char_p, c_char_p, c_char_p)
83-
def publishcb(topic: str, queueFullPolicy: str, payload: str):
84-
client.publish(topic=topic.decode("utf-8"),
85-
queueFullPolicy=queueFullPolicy.decode("utf-8"),
86-
payload=payload.decode("utf-8"))
87-
88-
@CFUNCTYPE(None, c_char_p, c_char_p)
89-
def getThingShadow(ctx: str, thingName: str):
90-
result = client.get_thing_shadow(thingName=thingName).payload
91-
lib.set_process_buffer(ctx, result)
92-
93-
@CFUNCTYPE(None, c_char_p, c_char_p, c_char_p)
94-
def updateThingShadow(ctx: str, thingName: str, payload: str):
95-
result = client.update_thing_shadow(
96-
thingName=thingName,
97-
payload=payload).payload
98-
99-
lib.set_process_buffer(ctx, result)
100-
101-
@CFUNCTYPE(None, c_char_p, c_char_p)
102-
def deleteThingShadow(ctx: str, thingName: str):
103-
result = client.delete_thing_shadow(thingName=thingName).payload
104-
lib.set_process_buffer(ctx, result)
105-
106-
@CFUNCTYPE(None, c_char_p, c_char_p, c_char_p, c_char_p)
107-
def getSecret(ctx: str, secretId: str, versionId: str, versionStage: str):
108-
ret = sm.get_secret_value(SecretId=secretId, VersionId=versionId, VersionStage=versionStage)
109-
110-
o = json.dumps({
111-
'arn': ret.ARN,
112-
'name':ret.Name,
113-
'version': ret.VersionId,
114-
'bin': ret.SecretBinary.encode("utf-8"),
115-
'secret': ret.SecretString,
116-
'stages': ret.VersionStages,
117-
'created':'2020-18-02T18:34:00'
118-
})
119-
## todo: - created: ret.CreatedDate (datetime)
120-
121-
lib.set_process_buffer(ctx, o.encode("utf-8"))
122-
123-
lib.initcb(
124-
publishcb,
125-
getThingShadow,
126-
updateThingShadow,
127-
deleteThingShadow,
128-
getSecret
129-
)
130-
131-
# Initialize the lambda for invocation (one-time only)
132-
lib.setup()
133-
134-
# Invokes the golang lambda handler (non binary version).
135-
def invokeJSON(context: any,
136-
event: any,
137-
deadlineMS: str = '300000') -> str:
138-
139-
c = json.dumps({
140-
'aws_request_id': context.aws_request_id,
141-
'client_context': {
142-
'client': context.client_context.client,
143-
'custom': context.client_context.custom,
144-
'env': context.client_context.env
145-
},
146-
'function_name': context.function_name,
147-
'function_version': context.function_version,
148-
'identity': context.identity,
149-
'invoked_function_arn': context.invoked_function_arn,
150-
'headers': {
151-
'Lambda-Runtime-Deadline-Ms': deadlineMS
152-
}
153-
}).encode("utf-8")
154-
155-
e = json.dumps(event).encode("utf-8")
156-
157-
goContext = GoString(c, len(c))
158-
goEvent = GoString(e, len(e))
159-
160-
r = lib.invokeJSON(goContext, goEvent)
161-
return r.decode("utf-8")
162-
`)
163-
1643
var soFile = []byte(`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`)
1654

generators/generator.go

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,7 @@ func main() {
1818
return
1919
}
2020

21-
content, err := ioutil.ReadFile("./internal/files/glue.go")
22-
if err != nil {
23-
fmt.Println("Failed to read glue.go file:", err.Error())
24-
return
25-
}
26-
27-
gen.Write([]byte("package main\n\n"))
28-
gen.Write([]byte("var glueGo = []byte(`"))
29-
gen.Write(content)
30-
gen.Write([]byte("`)\n\n"))
31-
32-
content, err = ioutil.ReadFile("./internal/files/glue.py")
33-
if err != nil {
34-
fmt.Println("Failed to read glue.py file:", err.Error())
35-
return
36-
}
37-
38-
gen.Write([]byte("var gluePy = []byte(`"))
39-
gen.Write(content)
40-
gen.Write([]byte("`)\n\n"))
41-
42-
content, err = ioutil.ReadFile("/tmp/gogreengrass/libaws-greengrass-core-sdk-c.so")
21+
content, err := ioutil.ReadFile("/tmp/gogreengrass/libaws-greengrass-core-sdk-c.so")
4322
if err != nil {
4423
fmt.Println("failed to read /tmp/gogreengrass/libaws-greengrass-core-sdk-c.so: ", err.Error())
4524
return
@@ -68,6 +47,7 @@ func main() {
6847

6948
content = []byte(base64.StdEncoding.EncodeToString(buf.Bytes()))
7049

50+
gen.Write([]byte("package main\n\n"))
7151
gen.Write([]byte("var soFile = []byte(`"))
7252
gen.Write(content)
7353
gen.Write([]byte("`)\n\n"))

internal/example/lambda/main/Makefile

Lines changed: 0 additions & 11 deletions
This file was deleted.

internal/example/lambda/main/main.go

Lines changed: 0 additions & 39 deletions
This file was deleted.

internal/files/glue.go

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)