File tree Expand file tree Collapse file tree 6 files changed +109
-41
lines changed Expand file tree Collapse file tree 6 files changed +109
-41
lines changed Original file line number Diff line number Diff line change 13
13
],
14
14
"program" : " ${workspaceFolder}/backend/index.mjs" ,
15
15
"envFile" : " ${workspaceFolder}/backend/.envrc"
16
+ },
17
+ {
18
+ "type" : " node" ,
19
+ "request" : " launch" ,
20
+ "name" : " Launch sls Program" ,
21
+ "skipFiles" : [
22
+ " <node_internals>/**"
23
+ ],
24
+ "cwd" : " ${workspaceFolder}/backend" ,
25
+ "runtimeExecutable" : " npm" ,
26
+ "runtimeArgs" : [
27
+ " run" ,
28
+ " sls-debug"
29
+ ],
30
+ "attachSimplePort" : 9229 ,
31
+ "sourceMaps" : true ,
32
+ "envFile" : " ${workspaceFolder}/backend/.envrc"
16
33
}
17
34
]
18
35
}
Original file line number Diff line number Diff line change
1
+ import { MongoClient } from "mongodb" ;
2
+ import * as Query from "./query.mjs" ;
3
+ import * as Mongo from "./mongo.mjs" ;
4
+
5
+ // grafana: test datasource connect
6
+ export const dbConfig = async ( req , res ) => {
7
+ let client = null ;
8
+ try {
9
+ client = new MongoClient ( req . body . db . url ) ;
10
+ await client . connect ( ) ;
11
+ res . send ( {
12
+ status : "success" ,
13
+ message : "MongoDB Connection test OK" ,
14
+ } ) ;
15
+ } catch ( err ) {
16
+ res . send ( {
17
+ status : "error" ,
18
+ message : "MongoDB Connection Error: " + err . message ,
19
+ } ) ;
20
+ } finally {
21
+ client ?. close ( ) ;
22
+ }
23
+ } ;
24
+
25
+ // grafana: qeury
26
+ export const dbQuery = async ( req , res , next ) => {
27
+ try {
28
+ const results = await Promise . all (
29
+ req . body . targets . map ( async ( target ) => {
30
+ const queryArgs = Query . parseQuery ( req , target ) ;
31
+ const result = await Mongo . aggregate (
32
+ req . body . db . url ,
33
+ req . body . db . db ,
34
+ queryArgs
35
+ ) ;
36
+ return result ;
37
+ } )
38
+ ) ;
39
+ res . json ( results ) ;
40
+ } catch ( err ) {
41
+ next ( err ) ;
42
+ }
43
+ } ;
Original file line number Diff line number Diff line change
1
+ import express from "express" ;
2
+ import serverless from "serverless-http" ;
3
+ import { dbConfig , dbQuery } from "./express.mjs" ;
4
+
5
+ const app = express ( ) ;
6
+ app . use ( express . json ( ) ) ;
7
+
8
+ // grafana: test datasource connect
9
+ app . all ( "/" , dbConfig ) ;
10
+
11
+ // grafana: qeury
12
+ app . all ( "/query" , dbQuery ) ;
13
+
14
+ //default error handler
15
+ app . use ( ( err , req , res , next ) => {
16
+ console . error ( err . stack ) ;
17
+ res . status ( 500 ) . send ( err . message ?? "unknown error" ) ;
18
+ } ) ;
19
+
20
+ export const handler = serverless ( app ) ;
Original file line number Diff line number Diff line change 1
1
import express from "express" ;
2
- import { MongoClient } from "mongodb" ;
3
- import * as Query from "./query.mjs" ;
4
- import * as Mongo from "./mongo.mjs" ;
5
2
import cors from "cors" ;
3
+ import { dbConfig , dbQuery } from "./express.mjs" ;
6
4
7
5
const app = express ( ) ;
8
6
app . use ( express . json ( ) ) ;
9
7
app . use ( cors ( ) ) ;
10
8
11
9
// grafana: test datasource connect
12
- app . all ( "/" , async ( req , res ) => {
13
- let client = null ;
14
- try {
15
- client = new MongoClient ( req . body . db . url ) ;
16
- await client . connect ( ) ;
17
- res . send ( {
18
- status : "success" ,
19
- message : "MongoDB Connection test OK" ,
20
- } ) ;
21
- } catch ( err ) {
22
- res . send ( {
23
- status : "error" ,
24
- message : "MongoDB Connection Error: " + err . message ,
25
- } ) ;
26
- } finally {
27
- client ?. close ( ) ;
28
- }
29
- } ) ;
10
+ app . all ( "/" , dbConfig ) ;
30
11
31
12
// grafana: qeury
32
- app . all ( "/query" , async ( req , res , next ) => {
33
- try {
34
- const results = await Promise . all (
35
- req . body . targets . map ( async ( target ) => {
36
- const queryArgs = Query . parseQuery ( req , target ) ;
37
- const result = await Mongo . aggregate (
38
- req . body . db . url ,
39
- req . body . db . db ,
40
- queryArgs
41
- ) ;
42
- return result ;
43
- } )
44
- ) ;
45
- res . json ( results ) ;
46
- } catch ( err ) {
47
- next ( err ) ;
48
- }
49
- } ) ;
13
+ app . all ( "/query" , dbQuery ) ;
50
14
51
15
//default error handler
52
16
app . use ( ( err , req , res , next ) => {
Original file line number Diff line number Diff line change 5
5
"main" : " index.mjs" ,
6
6
"scripts" : {
7
7
"start" : " node index.mjs" ,
8
- "test" : " echo \" Error: no test specified\" && exit 1"
8
+ "test" : " echo \" Error: no test specified\" && exit 1" ,
9
+ "sls-debug" : " export SLS_DEBUG=* && node --inspect node_modules/serverless/bin/serverless offline"
9
10
},
10
11
"author" : " " ,
11
12
"license" : " ISC" ,
12
13
"dependencies" : {
13
14
"cors" : " ^2.8.5" ,
14
15
"express" : " ^4.19.2" ,
15
- "mongodb" : " ^6.5.0"
16
+ "mongodb" : " ^6.5.0" ,
17
+ "serverless-http" : " ^3.2.0" ,
18
+ "serverless-offline" : " ^13.5.0"
16
19
}
17
20
}
Original file line number Diff line number Diff line change
1
+
2
+ service : lambda-mongo-grafana
3
+
4
+ provider :
5
+ name : aws
6
+ runtime : nodejs16.x
7
+ stage : default
8
+ region : us-west-2
9
+
10
+ plugins :
11
+ - serverless-offline
12
+
13
+ custom :
14
+ serverless-offline :
15
+ httpPort : 4000
16
+
17
+ functions :
18
+ app :
19
+ handler : index-sls.handler
20
+ events :
21
+ - http : ' ANY /{ANY+}'
You can’t perform that action at this time.
0 commit comments