@things-factory/integration-base 7.0.0-alpha.8 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/index.d.ts +1 -0
- package/dist-server/controllers/scenario-controller.d.ts +4 -0
- package/dist-server/controllers/scenario-controller.js +23 -7
- package/dist-server/controllers/scenario-controller.js.map +1 -1
- package/dist-server/engine/analyzer/analyze-integration.d.ts +5 -0
- package/dist-server/engine/analyzer/analyze-integration.js +1 -2
- package/dist-server/engine/analyzer/analyze-integration.js.map +1 -1
- package/dist-server/engine/connection-manager.d.ts +35 -0
- package/dist-server/engine/connection-manager.js +50 -13
- package/dist-server/engine/connection-manager.js.map +1 -1
- package/dist-server/engine/connector/echo-back-connector.d.ts +9 -0
- package/dist-server/engine/connector/echo-back-connector.js +1 -1
- package/dist-server/engine/connector/echo-back-connector.js.map +1 -1
- package/dist-server/engine/connector/echo-back-server.d.ts +8 -0
- package/dist-server/engine/connector/echo-back-server.js.map +1 -1
- package/dist-server/engine/connector/graphql-connector.d.ts +19 -0
- package/dist-server/engine/connector/graphql-connector.js +9 -9
- package/dist-server/engine/connector/graphql-connector.js.map +1 -1
- package/dist-server/engine/connector/http-connector.d.ts +25 -0
- package/dist-server/engine/connector/http-connector.js.map +1 -1
- package/dist-server/engine/connector/index.d.ts +12 -0
- package/dist-server/engine/connector/mqtt-connector.d.ts +14 -0
- package/dist-server/engine/connector/mqtt-connector.js +1 -1
- package/dist-server/engine/connector/mqtt-connector.js.map +1 -1
- package/dist-server/engine/connector/mssql-connector.d.ts +30 -0
- package/dist-server/engine/connector/mssql-connector.js +21 -5
- package/dist-server/engine/connector/mssql-connector.js.map +1 -1
- package/dist-server/engine/connector/mysql-connector.d.ts +13 -0
- package/dist-server/engine/connector/mysql-connector.js.map +1 -1
- package/dist-server/engine/connector/operato-connector.d.ts +27 -0
- package/dist-server/engine/connector/operato-connector.js +21 -24
- package/dist-server/engine/connector/operato-connector.js.map +1 -1
- package/dist-server/engine/connector/oracle-connector.d.ts +29 -0
- package/dist-server/engine/connector/oracle-connector.js +1 -1
- package/dist-server/engine/connector/oracle-connector.js.map +1 -1
- package/dist-server/engine/connector/postgresql-connector.d.ts +14 -0
- package/dist-server/engine/connector/postgresql-connector.js +2 -2
- package/dist-server/engine/connector/postgresql-connector.js.map +1 -1
- package/dist-server/engine/connector/proxy-connector.d.ts +15 -0
- package/dist-server/engine/connector/proxy-connector.js +44 -0
- package/dist-server/engine/connector/proxy-connector.js.map +1 -0
- package/dist-server/engine/connector/socket-server.d.ts +9 -0
- package/dist-server/engine/connector/socket-server.js +1 -1
- package/dist-server/engine/connector/socket-server.js.map +1 -1
- package/dist-server/engine/connector/sqlite-connector.d.ts +10 -0
- package/dist-server/engine/connector/sqlite-connector.js +2 -2
- package/dist-server/engine/connector/sqlite-connector.js.map +1 -1
- package/dist-server/engine/edge-client.d.ts +18 -0
- package/dist-server/engine/edge-client.js +37 -0
- package/dist-server/engine/edge-client.js.map +1 -0
- package/dist-server/engine/index.d.ts +8 -0
- package/dist-server/engine/index.js +1 -0
- package/dist-server/engine/index.js.map +1 -1
- package/dist-server/engine/pending-queue.d.ts +24 -0
- package/dist-server/engine/pending-queue.js.map +1 -1
- package/dist-server/engine/scenario-engine.d.ts +11 -0
- package/dist-server/engine/scenario-engine.js.map +1 -1
- package/dist-server/engine/task/book-up-scenario.d.ts +1 -0
- package/dist-server/engine/task/csv-readline.d.ts +1 -0
- package/dist-server/engine/task/csv-readline.js.map +1 -1
- package/dist-server/engine/task/data-accessor.d.ts +1 -0
- package/dist-server/engine/task/data-mapper.d.ts +1 -0
- package/dist-server/engine/task/data-mapper.js.map +1 -1
- package/dist-server/engine/task/database-query.d.ts +1 -0
- package/dist-server/engine/task/database-query.js +21 -12
- package/dist-server/engine/task/database-query.js.map +1 -1
- package/dist-server/engine/task/echo-receive.d.ts +1 -0
- package/dist-server/engine/task/echo-send.d.ts +1 -0
- package/dist-server/engine/task/echo-send.js.map +1 -1
- package/dist-server/engine/task/empty-check.d.ts +1 -0
- package/dist-server/engine/task/empty-check.js.map +1 -1
- package/dist-server/engine/task/end.d.ts +1 -0
- package/dist-server/engine/task/floating-point.d.ts +1 -0
- package/dist-server/engine/task/floating-point.js.map +1 -1
- package/dist-server/engine/task/goto.d.ts +1 -0
- package/dist-server/engine/task/graphql-mutate.d.ts +1 -0
- package/dist-server/engine/task/graphql-mutate.js +23 -12
- package/dist-server/engine/task/graphql-mutate.js.map +1 -1
- package/dist-server/engine/task/graphql-query.d.ts +1 -0
- package/dist-server/engine/task/graphql-query.js +23 -12
- package/dist-server/engine/task/graphql-query.js.map +1 -1
- package/dist-server/engine/task/headless-post.d.ts +1 -0
- package/dist-server/engine/task/headless-post.js.map +1 -1
- package/dist-server/engine/task/headless-scrap.d.ts +1 -0
- package/dist-server/engine/task/headless-scrap.js.map +1 -1
- package/dist-server/engine/task/http-get.d.ts +1 -0
- package/dist-server/engine/task/http-get.js +28 -12
- package/dist-server/engine/task/http-get.js.map +1 -1
- package/dist-server/engine/task/http-post.d.ts +1 -0
- package/dist-server/engine/task/http-post.js +22 -11
- package/dist-server/engine/task/http-post.js.map +1 -1
- package/dist-server/engine/task/index.d.ts +43 -0
- package/dist-server/engine/task/jsonata.d.ts +1 -0
- package/dist-server/engine/task/jsonata.js +5 -1
- package/dist-server/engine/task/jsonata.js.map +1 -1
- package/dist-server/engine/task/local-graphql-mutate.d.ts +1 -0
- package/dist-server/engine/task/local-graphql-mutate.js +23 -11
- package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
- package/dist-server/engine/task/local-graphql-query.d.ts +1 -0
- package/dist-server/engine/task/local-graphql-query.js +23 -11
- package/dist-server/engine/task/local-graphql-query.js.map +1 -1
- package/dist-server/engine/task/log.d.ts +1 -0
- package/dist-server/engine/task/log.js +15 -11
- package/dist-server/engine/task/log.js.map +1 -1
- package/dist-server/engine/task/mqtt-publish.d.ts +1 -0
- package/dist-server/engine/task/mqtt-publish.js.map +1 -1
- package/dist-server/engine/task/mqtt-subscribe.d.ts +1 -0
- package/dist-server/engine/task/mqtt-subscribe.js.map +1 -1
- package/dist-server/engine/task/oracle-procedure.d.ts +1 -0
- package/dist-server/engine/task/oracle-procedure.js +19 -13
- package/dist-server/engine/task/oracle-procedure.js.map +1 -1
- package/dist-server/engine/task/pick-pending-scenario.d.ts +1 -0
- package/dist-server/engine/task/pick-pending-scenario.js.map +1 -1
- package/dist-server/engine/task/publish.d.ts +1 -0
- package/dist-server/engine/task/publish.js.map +1 -1
- package/dist-server/engine/task/random.d.ts +1 -0
- package/dist-server/engine/task/reset-pending-queue.d.ts +1 -0
- package/dist-server/engine/task/script.d.ts +1 -0
- package/dist-server/engine/task/script.js +35 -18
- package/dist-server/engine/task/script.js.map +1 -1
- package/dist-server/engine/task/set-domain.d.ts +1 -0
- package/dist-server/engine/task/set-domain.js.map +1 -1
- package/dist-server/engine/task/sleep.d.ts +1 -0
- package/dist-server/engine/task/sleep.js.map +1 -1
- package/dist-server/engine/task/socket-listener.d.ts +1 -0
- package/dist-server/engine/task/socket-listener.js.map +1 -1
- package/dist-server/engine/task/state-read.d.ts +1 -0
- package/dist-server/engine/task/state-read.js.map +1 -1
- package/dist-server/engine/task/state-write.d.ts +1 -0
- package/dist-server/engine/task/state-write.js.map +1 -1
- package/dist-server/engine/task/stop-scenario.d.ts +1 -0
- package/dist-server/engine/task/sub-scenario.d.ts +1 -0
- package/dist-server/engine/task/switch-goto.d.ts +1 -0
- package/dist-server/engine/task/switch-range-goto.d.ts +1 -0
- package/dist-server/engine/task/switch-range-goto.js.map +1 -1
- package/dist-server/engine/task/switch-range-scenario.d.ts +1 -0
- package/dist-server/engine/task/switch-range-scenario.js.map +1 -1
- package/dist-server/engine/task/switch-range-set.d.ts +1 -0
- package/dist-server/engine/task/switch-range-set.js.map +1 -1
- package/dist-server/engine/task/switch-scenario.d.ts +1 -0
- package/dist-server/engine/task/switch-set.d.ts +1 -0
- package/dist-server/engine/task/throw.d.ts +1 -0
- package/dist-server/engine/task/utils/headless-pool-for-scenario.d.ts +1 -0
- package/dist-server/engine/task/utils/headless-pool-for-scenario.js +1 -2
- package/dist-server/engine/task/utils/headless-pool-for-scenario.js.map +1 -1
- package/dist-server/engine/task/utils/substitute.d.ts +1 -0
- package/dist-server/engine/task/utils/substitute.js +1 -2
- package/dist-server/engine/task/utils/substitute.js.map +1 -1
- package/dist-server/engine/task/variables.d.ts +1 -0
- package/dist-server/engine/task-registry.d.ts +12 -0
- package/dist-server/engine/types.d.ts +94 -0
- package/dist-server/engine/types.js.map +1 -1
- package/dist-server/index.d.ts +6 -0
- package/dist-server/index.js +1 -2
- package/dist-server/index.js.map +1 -1
- package/dist-server/migrations/index.d.ts +1 -0
- package/dist-server/restful/index.d.ts +1 -0
- package/dist-server/restful/unstable/index.d.ts +7 -0
- package/dist-server/restful/unstable/run-scenario.d.ts +1 -0
- package/dist-server/restful/unstable/run-scenario.js +0 -1
- package/dist-server/restful/unstable/run-scenario.js.map +1 -1
- package/dist-server/restful/unstable/scenario-instance.d.ts +1 -0
- package/dist-server/restful/unstable/scenario-instances.d.ts +1 -0
- package/dist-server/restful/unstable/scenario.d.ts +1 -0
- package/dist-server/restful/unstable/scenarios.d.ts +1 -0
- package/dist-server/restful/unstable/start-scenario.d.ts +1 -0
- package/dist-server/restful/unstable/stop-scenario.d.ts +1 -0
- package/dist-server/routers/scenario-schedule-callback-router.d.ts +1 -0
- package/dist-server/routers/scenario-schedule-callback-router.js +2 -3
- package/dist-server/routers/scenario-schedule-callback-router.js.map +1 -1
- package/dist-server/routers/scenario-view-router.d.ts +1 -0
- package/dist-server/routers/scenario-view-router.js.map +1 -1
- package/dist-server/routes.d.ts +1 -0
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/analysis/analysis-query.d.ts +3 -0
- package/dist-server/service/analysis/analysis-query.js +2 -2
- package/dist-server/service/analysis/analysis-query.js.map +1 -1
- package/dist-server/service/analysis/index.d.ts +2 -0
- package/dist-server/service/connection/connection-mutation.d.ts +30 -0
- package/dist-server/service/connection/connection-mutation.js +6 -10
- package/dist-server/service/connection/connection-mutation.js.map +1 -1
- package/dist-server/service/connection/connection-query.d.ts +12 -0
- package/dist-server/service/connection/connection-query.js +18 -11
- package/dist-server/service/connection/connection-query.js.map +1 -1
- package/dist-server/service/connection/connection-subscription.d.ts +10 -0
- package/dist-server/service/connection/connection-subscription.js +3 -3
- package/dist-server/service/connection/connection-subscription.js.map +1 -1
- package/dist-server/service/connection/connection-type.d.ts +133 -0
- package/dist-server/service/connection/connection-type.js +45 -21
- package/dist-server/service/connection/connection-type.js.map +1 -1
- package/dist-server/service/connection/index.d.ts +6 -0
- package/dist-server/service/connector/connector-query.d.ts +6 -0
- package/dist-server/service/connector/connector-query.js +2 -2
- package/dist-server/service/connector/connector-query.js.map +1 -1
- package/dist-server/service/connector/connector-type.d.ts +12 -0
- package/dist-server/service/connector/connector-type.js +4 -4
- package/dist-server/service/connector/connector-type.js.map +1 -1
- package/dist-server/service/connector/index.d.ts +3 -0
- package/dist-server/service/index.d.ts +17 -0
- package/dist-server/service/payload-log/index.d.ts +5 -0
- package/dist-server/service/payload-log/payload-log-mutation.d.ts +10 -0
- package/dist-server/service/payload-log/payload-log-mutation.js +5 -5
- package/dist-server/service/payload-log/payload-log-mutation.js.map +1 -1
- package/dist-server/service/payload-log/payload-log-query.d.ts +11 -0
- package/dist-server/service/payload-log/payload-log-query.js +3 -3
- package/dist-server/service/payload-log/payload-log-query.js.map +1 -1
- package/dist-server/service/payload-log/payload-log-type.d.ts +15 -0
- package/dist-server/service/payload-log/payload-log-type.js +6 -6
- package/dist-server/service/payload-log/payload-log-type.js.map +1 -1
- package/dist-server/service/payload-log/payload-log.d.ts +23 -0
- package/dist-server/service/payload-log/payload-log.js +6 -6
- package/dist-server/service/payload-log/payload-log.js.map +1 -1
- package/dist-server/service/property-spec.d.ts +12 -0
- package/dist-server/service/property-spec.js +6 -2
- package/dist-server/service/property-spec.js.map +1 -1
- package/dist-server/service/scenario/index.d.ts +5 -0
- package/dist-server/service/scenario/scenario-mutation.d.ts +13 -0
- package/dist-server/service/scenario/scenario-mutation.js +3 -3
- package/dist-server/service/scenario/scenario-mutation.js.map +1 -1
- package/dist-server/service/scenario/scenario-query.d.ts +18 -0
- package/dist-server/service/scenario/scenario-query.js +3 -3
- package/dist-server/service/scenario/scenario-query.js.map +1 -1
- package/dist-server/service/scenario/scenario-type.d.ts +30 -0
- package/dist-server/service/scenario/scenario-type.js +14 -6
- package/dist-server/service/scenario/scenario-type.js.map +1 -1
- package/dist-server/service/scenario/scenario.d.ts +36 -0
- package/dist-server/service/scenario/scenario.js +18 -9
- package/dist-server/service/scenario/scenario.js.map +1 -1
- package/dist-server/service/scenario-flow/scenario-flow.d.ts +6 -0
- package/dist-server/service/scenario-flow/scenario-flow.js +2 -2
- package/dist-server/service/scenario-flow/scenario-flow.js.map +1 -1
- package/dist-server/service/scenario-instance/index.d.ts +5 -0
- package/dist-server/service/scenario-instance/scenario-instance-mutation.d.ts +6 -0
- package/dist-server/service/scenario-instance/scenario-instance-mutation.js +3 -3
- package/dist-server/service/scenario-instance/scenario-instance-mutation.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-query.d.ts +6 -0
- package/dist-server/service/scenario-instance/scenario-instance-query.js +3 -67
- package/dist-server/service/scenario-instance/scenario-instance-query.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-subscription.d.ts +10 -0
- package/dist-server/service/scenario-instance/scenario-instance-subscription.js +2 -2
- package/dist-server/service/scenario-instance/scenario-instance-subscription.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-type.d.ts +102 -0
- package/dist-server/service/scenario-instance/scenario-instance-type.js +127 -33
- package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
- package/dist-server/service/scenario-queue/index.d.ts +3 -0
- package/dist-server/service/scenario-queue/scenario-queue-subscription.d.ts +6 -0
- package/dist-server/service/scenario-queue/scenario-queue-subscription.js +2 -2
- package/dist-server/service/scenario-queue/scenario-queue-subscription.js.map +1 -1
- package/dist-server/service/scenario-queue/scenario-queue-type.d.ts +11 -0
- package/dist-server/service/scenario-queue/scenario-queue-type.js +4 -4
- package/dist-server/service/scenario-queue/scenario-queue-type.js.map +1 -1
- package/dist-server/service/state-register/index.d.ts +6 -0
- package/dist-server/service/state-register/state-register-mutation.d.ts +11 -0
- package/dist-server/service/state-register/state-register-mutation.js +2 -2
- package/dist-server/service/state-register/state-register-mutation.js.map +1 -1
- package/dist-server/service/state-register/state-register-query.d.ts +14 -0
- package/dist-server/service/state-register/state-register-query.js +3 -3
- package/dist-server/service/state-register/state-register-query.js.map +1 -1
- package/dist-server/service/state-register/state-register-type.d.ts +23 -0
- package/dist-server/service/state-register/state-register-type.js +6 -6
- package/dist-server/service/state-register/state-register-type.js.map +1 -1
- package/dist-server/service/state-register/state-register.d.ts +22 -0
- package/dist-server/service/state-register/state-register.js +3 -3
- package/dist-server/service/state-register/state-register.js.map +1 -1
- package/dist-server/service/step/index.d.ts +5 -0
- package/dist-server/service/step/step-mutation.d.ts +5 -0
- package/dist-server/service/step/step-mutation.js +2 -2
- package/dist-server/service/step/step-mutation.js.map +1 -1
- package/dist-server/service/step/step-query.d.ts +12 -0
- package/dist-server/service/step/step-query.js +3 -3
- package/dist-server/service/step/step-query.js.map +1 -1
- package/dist-server/service/step/step-type.d.ts +111 -0
- package/dist-server/service/step/step-type.js +25 -22
- package/dist-server/service/step/step-type.js.map +1 -1
- package/dist-server/service/task-type/index.d.ts +3 -0
- package/dist-server/service/task-type/task-type-query.d.ts +6 -0
- package/dist-server/service/task-type/task-type-query.js +2 -2
- package/dist-server/service/task-type/task-type-query.js.map +1 -1
- package/dist-server/service/task-type/task-type-type.d.ts +12 -0
- package/dist-server/service/task-type/task-type-type.js +4 -4
- package/dist-server/service/task-type/task-type-type.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/integration/concept/script-internal-variables.ja.md +21 -1
- package/helps/integration/concept/script-internal-variables.ko.md +17 -0
- package/helps/integration/concept/script-internal-variables.md +18 -0
- package/helps/integration/concept/script-internal-variables.ms.md +19 -1
- package/helps/integration/concept/script-internal-variables.zh.md +18 -0
- package/helps/integration/connector/mssql-connector.ja.md +13 -9
- package/helps/integration/connector/mssql-connector.ko.md +13 -9
- package/helps/integration/connector/mssql-connector.md +13 -9
- package/helps/integration/connector/mssql-connector.ms.md +13 -9
- package/helps/integration/connector/mssql-connector.zh.md +13 -9
- package/helps/integration/connector/operato-connector.ja.md +0 -3
- package/helps/integration/task/script.ja.md +1 -1
- package/helps/integration/task/script.ko.md +1 -1
- package/helps/integration/task/script.md +1 -1
- package/helps/integration/task/script.ms.md +1 -1
- package/helps/integration/task/script.zh.md +1 -1
- package/package.json +12 -11
- package/server/controllers/scenario-controller.ts +60 -11
- package/server/engine/connection-manager.ts +63 -14
- package/server/engine/connector/echo-back-connector.ts +2 -1
- package/server/engine/connector/graphql-connector.ts +12 -9
- package/server/engine/connector/mqtt-connector.ts +2 -1
- package/server/engine/connector/mssql-connector.ts +21 -5
- package/server/engine/connector/operato-connector.ts +22 -26
- package/server/engine/connector/oracle-connector.ts +5 -8
- package/server/engine/connector/postgresql-connector.ts +3 -2
- package/server/engine/connector/proxy-connector.ts +53 -0
- package/server/engine/connector/socket-server.ts +1 -1
- package/server/engine/connector/sqlite-connector.ts +2 -5
- package/server/engine/edge-client.ts +45 -0
- package/server/engine/index.ts +2 -1
- package/server/engine/task/database-query.ts +21 -12
- package/server/engine/task/graphql-mutate.ts +23 -13
- package/server/engine/task/graphql-query.ts +22 -13
- package/server/engine/task/http-get.ts +26 -12
- package/server/engine/task/http-post.ts +22 -11
- package/server/engine/task/jsonata.ts +5 -1
- package/server/engine/task/local-graphql-mutate.ts +23 -13
- package/server/engine/task/local-graphql-query.ts +23 -11
- package/server/engine/task/log.ts +14 -11
- package/server/engine/task/oracle-procedure.ts +24 -18
- package/server/engine/task/script.ts +33 -18
- package/server/engine/types.ts +47 -48
- package/server/index.ts +1 -2
- package/server/restful/unstable/run-scenario.ts +0 -1
- package/server/routers/scenario-schedule-callback-router.ts +2 -2
- package/server/service/connection/connection-mutation.ts +9 -29
- package/server/service/connection/connection-query.ts +17 -7
- package/server/service/connection/connection-subscription.ts +1 -1
- package/server/service/connection/connection-type.ts +53 -32
- package/server/service/payload-log/payload-log-mutation.ts +1 -1
- package/server/service/payload-log/payload-log-query.ts +4 -1
- package/server/service/payload-log/payload-log.ts +5 -5
- package/server/service/property-spec.ts +3 -0
- package/server/service/scenario/scenario-query.ts +1 -1
- package/server/service/scenario/scenario-type.ts +6 -0
- package/server/service/scenario/scenario.ts +26 -7
- package/server/service/scenario-instance/scenario-instance-mutation.ts +7 -4
- package/server/service/scenario-instance/scenario-instance-query.ts +4 -30
- package/server/service/scenario-instance/scenario-instance-type.ts +105 -19
- package/server/service/state-register/state-register-query.ts +4 -1
- package/server/service/state-register/state-register.ts +1 -1
- package/server/service/step/step-query.ts +1 -1
- package/server/service/step/step-type.ts +81 -79
- package/translations/en.json +4 -1
- package/translations/ja.json +4 -1
- package/translations/ko.json +4 -1
- package/translations/ms.json +4 -1
- package/translations/zh.json +4 -1
@@ -5,8 +5,9 @@ import { Domain, getRepository, pubsub, PubSubLogTransport } from '@things-facto
|
|
5
5
|
|
6
6
|
import { Connection, ConnectionStatus } from '../service'
|
7
7
|
import { Connector } from './types'
|
8
|
+
import { ProxyConnector } from './connector/proxy-connector'
|
8
9
|
|
9
|
-
const { combine,
|
10
|
+
const { combine, splat, printf, errors } = format
|
10
11
|
const debug = require('debug')('things-factory:integration-base:connections')
|
11
12
|
|
12
13
|
const SYSTEM_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone
|
@@ -17,13 +18,14 @@ const systemTimestamp = format((info, opts) => {
|
|
17
18
|
|
18
19
|
export class ConnectionManager {
|
19
20
|
private static connectors: { [propName: string]: Connector } = {}
|
20
|
-
private static connections = {}
|
21
|
-
private static
|
22
|
-
|
21
|
+
private static connections: { [domainId: string]: { [name: string]: any } } = {}
|
22
|
+
private static entities = {}
|
23
|
+
private static logFormat = printf(({ level, message, timestamp, stack }) => {
|
24
|
+
return `${timestamp} ${level}: ${stack || message}`
|
23
25
|
})
|
24
26
|
|
25
27
|
public static logger = createLogger({
|
26
|
-
format: combine(systemTimestamp({ tz: SYSTEM_TZ }), splat(), ConnectionManager.logFormat),
|
28
|
+
format: combine(errors({ stack: true }), systemTimestamp({ tz: SYSTEM_TZ }), splat(), ConnectionManager.logFormat),
|
27
29
|
transports: [
|
28
30
|
new (transports as any).DailyRotateFile({
|
29
31
|
filename: `logs/connections-%DATE%.log`,
|
@@ -43,15 +45,14 @@ export class ConnectionManager {
|
|
43
45
|
const CONNECTIONS = (
|
44
46
|
await getRepository(Connection).find({
|
45
47
|
where: { active: true },
|
46
|
-
relations: ['domain', 'creator', 'updater']
|
48
|
+
relations: ['domain', 'edge', 'creator', 'updater']
|
47
49
|
})
|
48
50
|
).map(connection => {
|
49
51
|
var params = {}
|
50
52
|
try {
|
51
53
|
params = JSON.parse(connection.params || '{}')
|
52
54
|
} catch (ex) {
|
53
|
-
ConnectionManager.logger.error(`connection '${connection.name}' params should be JSON format
|
54
|
-
ConnectionManager.logger.error(ex)
|
55
|
+
ConnectionManager.logger.error(`connection '${connection.name}' params should be JSON format`, ex)
|
55
56
|
}
|
56
57
|
|
57
58
|
return {
|
@@ -63,14 +64,23 @@ export class ConnectionManager {
|
|
63
64
|
ConnectionManager.logger.info('Initializing ConnectionManager...')
|
64
65
|
|
65
66
|
return await Promise.all(
|
66
|
-
Object.keys(ConnectionManager.connectors).map(type => {
|
67
|
-
|
67
|
+
[...Object.keys(ConnectionManager.connectors), 'proxy-connector'].map(type => {
|
68
|
+
const connector = type == 'proxy-connector' ? ProxyConnector.instance : ConnectionManager.getConnector(type)
|
69
|
+
|
68
70
|
ConnectionManager.logger.info(`Connector '${type}' started to ready`)
|
69
71
|
|
70
72
|
return connector
|
71
|
-
.ready(
|
73
|
+
.ready(
|
74
|
+
CONNECTIONS.filter(connection => {
|
75
|
+
if (type == 'proxy-connector') {
|
76
|
+
return !!connection.edge
|
77
|
+
} else {
|
78
|
+
return !connection.edge && connection.type == type
|
79
|
+
}
|
80
|
+
}) as any
|
81
|
+
)
|
72
82
|
.catch(error => {
|
73
|
-
ConnectionManager.logger.error(error
|
83
|
+
ConnectionManager.logger.error(error)
|
74
84
|
})
|
75
85
|
.then(() => {
|
76
86
|
ConnectionManager.logger.info(`All connector for '${type}' ready`)
|
@@ -103,6 +113,14 @@ export class ConnectionManager {
|
|
103
113
|
delete ConnectionManager.connectors[type]
|
104
114
|
}
|
105
115
|
|
116
|
+
static getConnections() {
|
117
|
+
return ConnectionManager.connections
|
118
|
+
}
|
119
|
+
|
120
|
+
static getEntities() {
|
121
|
+
return ConnectionManager.entities
|
122
|
+
}
|
123
|
+
|
106
124
|
static getConnectionInstance(connection: Connection): any {
|
107
125
|
const { domain, name } = connection
|
108
126
|
return ConnectionManager.connections[domain.id]?.[name]
|
@@ -119,8 +137,29 @@ export class ConnectionManager {
|
|
119
137
|
return connection
|
120
138
|
}
|
121
139
|
|
140
|
+
static getConnectionInstanceEntityByName(domain: Domain, name: string): any {
|
141
|
+
const connection = ConnectionManager.entities[domain.id]?.[name]
|
142
|
+
if(connection) {
|
143
|
+
return connection
|
144
|
+
}
|
145
|
+
|
146
|
+
if(domain.parentId) {
|
147
|
+
return ConnectionManager.entities[domain.id]?.[name]
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
122
151
|
static getConnectionInstances(domain: Domain): { [connectionName: string]: any } {
|
123
152
|
const connections = ConnectionManager.connections[domain.id]
|
153
|
+
const parentConnections = domain.parentId && ConnectionManager.connections[domain.parentId]
|
154
|
+
|
155
|
+
return {
|
156
|
+
...parentConnections,
|
157
|
+
...connections
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
static getConnectionInstanceEntities(domain: Domain): { [connectionName: string]: any } {
|
162
|
+
const connections = ConnectionManager.entities[domain.id]
|
124
163
|
|
125
164
|
return {
|
126
165
|
...connections
|
@@ -135,7 +174,13 @@ export class ConnectionManager {
|
|
135
174
|
connections = ConnectionManager.connections[domain.id] = {}
|
136
175
|
}
|
137
176
|
|
177
|
+
var entities = ConnectionManager.entities[domain.id]
|
178
|
+
if (!entities) {
|
179
|
+
entities = ConnectionManager.entities[domain.id] = {}
|
180
|
+
}
|
181
|
+
|
138
182
|
connections[name] = instance
|
183
|
+
entities[name] = connection
|
139
184
|
|
140
185
|
ConnectionManager.publishState(connection, ConnectionStatus.CONNECTED)
|
141
186
|
debug('add-connection', domain.subdomain, name)
|
@@ -144,6 +189,8 @@ export class ConnectionManager {
|
|
144
189
|
static removeConnectionInstance(connection: Connection): any {
|
145
190
|
const { domain, name } = connection
|
146
191
|
var connections = ConnectionManager.connections[domain.id]
|
192
|
+
var entities = ConnectionManager.entities[domain.id]
|
193
|
+
|
147
194
|
var instance = connections?.[name]
|
148
195
|
|
149
196
|
if (!connections || !instance) {
|
@@ -152,6 +199,7 @@ export class ConnectionManager {
|
|
152
199
|
}
|
153
200
|
|
154
201
|
delete connections[name]
|
202
|
+
delete entities[name]
|
155
203
|
|
156
204
|
ConnectionManager.publishState(connection, ConnectionStatus.DISCONNECTED)
|
157
205
|
debug('remove-connection', `'${name}' connection is removed from domain '${domain.subdomain}'`)
|
@@ -159,8 +207,8 @@ export class ConnectionManager {
|
|
159
207
|
return instance
|
160
208
|
}
|
161
209
|
|
162
|
-
static publishState(connection: Connection, state) {
|
163
|
-
const { domain, id, name, description, type } = connection
|
210
|
+
private static async publishState(connection: Connection, state) {
|
211
|
+
const { domain, id, name, description, type, edge } = connection
|
164
212
|
|
165
213
|
pubsub.publish('connection-state', {
|
166
214
|
connectionState: {
|
@@ -169,6 +217,7 @@ export class ConnectionManager {
|
|
169
217
|
name,
|
170
218
|
description,
|
171
219
|
type,
|
220
|
+
edge,
|
172
221
|
state,
|
173
222
|
timestamp: new Date()
|
174
223
|
}
|
@@ -25,7 +25,8 @@ export class EchoBack implements Connector {
|
|
25
25
|
)
|
26
26
|
} catch (e) {
|
27
27
|
ConnectionManager.logger.error(
|
28
|
-
`echo-back-connector connection(${connection.name}:${connection.endpoint}) is not connected
|
28
|
+
`echo-back-connector connection(${connection.name}:${connection.endpoint}) is not connected.`,
|
29
|
+
e
|
29
30
|
)
|
30
31
|
}
|
31
32
|
}
|
@@ -23,10 +23,6 @@ const defaultOptions: any = {
|
|
23
23
|
}
|
24
24
|
}
|
25
25
|
|
26
|
-
const cache = new InMemoryCache({
|
27
|
-
addTypename: false
|
28
|
-
})
|
29
|
-
|
30
26
|
export class GraphqlConnector implements Connector {
|
31
27
|
async ready(connectionConfigs: InputConnection[]) {
|
32
28
|
await Promise.all(connectionConfigs.map(this.connect.bind(this)))
|
@@ -35,19 +31,22 @@ export class GraphqlConnector implements Connector {
|
|
35
31
|
}
|
36
32
|
|
37
33
|
async connect(connection: InputConnection) {
|
38
|
-
|
34
|
+
const {
|
39
35
|
endpoint: uri,
|
40
36
|
params: { authClient }
|
41
37
|
} = connection
|
42
38
|
|
43
|
-
|
39
|
+
const ERROR_HANDLER: any = ({ graphQLErrors, networkError }) => {
|
44
40
|
if (graphQLErrors)
|
45
41
|
graphQLErrors.map(({ message, locations, path }) => {
|
46
|
-
ConnectionManager.logger.error(
|
42
|
+
ConnectionManager.logger.error(
|
43
|
+
`[GraphQL error] Message: ${message}, Location: ${locations}, Path: ${path}`,
|
44
|
+
graphQLErrors
|
45
|
+
)
|
47
46
|
})
|
48
47
|
|
49
48
|
if (networkError) {
|
50
|
-
ConnectionManager.logger.error(`[Network error - ${networkError.statusCode}]
|
49
|
+
ConnectionManager.logger.error(`[Network error - ${networkError.statusCode}]`, networkError)
|
51
50
|
}
|
52
51
|
}
|
53
52
|
|
@@ -65,6 +64,10 @@ export class GraphqlConnector implements Connector {
|
|
65
64
|
return forward(operation)
|
66
65
|
})
|
67
66
|
|
67
|
+
const cache = new InMemoryCache({
|
68
|
+
addTypename: false
|
69
|
+
})
|
70
|
+
|
68
71
|
ConnectionManager.addConnectionInstance(
|
69
72
|
connection,
|
70
73
|
new ApolloClient({
|
@@ -87,7 +90,7 @@ export class GraphqlConnector implements Connector {
|
|
87
90
|
}
|
88
91
|
|
89
92
|
async disconnect(connection: InputConnection) {
|
90
|
-
|
93
|
+
const client = ConnectionManager.getConnectionInstance(connection)
|
91
94
|
client.stop()
|
92
95
|
ConnectionManager.removeConnectionInstance(connection)
|
93
96
|
|
@@ -39,7 +39,8 @@ export class MqttConnector implements Connector {
|
|
39
39
|
ConnectionManager.logger.info(`mqtt-connector connection(${connection.name}:${connection.endpoint}) is connected`)
|
40
40
|
} catch (err) {
|
41
41
|
ConnectionManager.logger.error(
|
42
|
-
`mqtt-connector connection(${connection.name}:${connection.endpoint}) is failed
|
42
|
+
`mqtt-connector connection(${connection.name}:${connection.endpoint}) is failed.`,
|
43
|
+
err
|
43
44
|
)
|
44
45
|
}
|
45
46
|
}
|
@@ -7,7 +7,7 @@ import { InputConnection } from '../../service/connection/connection-type'
|
|
7
7
|
try {
|
8
8
|
var Client = require('mssql')
|
9
9
|
} catch (err) {
|
10
|
-
logger.error('mssql module loading failed')
|
10
|
+
logger.error('mssql module loading failed', err)
|
11
11
|
}
|
12
12
|
|
13
13
|
export class MssqlConnector implements Connector {
|
@@ -20,7 +20,7 @@ export class MssqlConnector implements Connector {
|
|
20
20
|
async connect(connection: InputConnection) {
|
21
21
|
const {
|
22
22
|
endpoint,
|
23
|
-
params: { user, password, database, encrypt = 'Y' }
|
23
|
+
params: { user, password, database, encrypt = 'Y', trustServerCertificate }
|
24
24
|
} = connection
|
25
25
|
|
26
26
|
const [host, port = 1433] = endpoint.split(':')
|
@@ -33,9 +33,17 @@ export class MssqlConnector implements Connector {
|
|
33
33
|
// client is pool
|
34
34
|
user,
|
35
35
|
password,
|
36
|
-
server:
|
37
|
-
database
|
38
|
-
|
36
|
+
server: host,
|
37
|
+
database,
|
38
|
+
pool: {
|
39
|
+
max: 10,
|
40
|
+
min: 0,
|
41
|
+
idleTimeoutMillis: 30000
|
42
|
+
},
|
43
|
+
options: {
|
44
|
+
encrypt: encrypt === 'Y',
|
45
|
+
trustServerCertificate: trustServerCertificate === 'Y'
|
46
|
+
}
|
39
47
|
})
|
40
48
|
|
41
49
|
ConnectionManager.addConnectionInstance(connection, {
|
@@ -88,6 +96,14 @@ export class MssqlConnector implements Connector {
|
|
88
96
|
property: {
|
89
97
|
options: ['Y', 'N']
|
90
98
|
}
|
99
|
+
},
|
100
|
+
{
|
101
|
+
type: 'select',
|
102
|
+
name: 'trustServerCertificate',
|
103
|
+
label: 'trust-server-certificate',
|
104
|
+
property: {
|
105
|
+
options: ['Y', 'N']
|
106
|
+
}
|
91
107
|
}
|
92
108
|
]
|
93
109
|
}
|
@@ -3,7 +3,6 @@ import 'cross-fetch/polyfill'
|
|
3
3
|
import { ApolloClient, InMemoryCache, createHttpLink, split } from '@apollo/client/core'
|
4
4
|
import { setContext } from '@apollo/client/link/context'
|
5
5
|
|
6
|
-
// for subscription
|
7
6
|
import WebSocket from 'ws'
|
8
7
|
import { createClient } from 'graphql-ws'
|
9
8
|
import { GraphQLWsLink } from '@apollo/client/link/subscriptions'
|
@@ -20,7 +19,7 @@ import { ScenarioInstance } from '../../service/scenario-instance/scenario-insta
|
|
20
19
|
import { getRepository, GraphqlLocalClient, Domain } from '@things-factory/shell'
|
21
20
|
import { User, checkPermission } from '@things-factory/auth-base'
|
22
21
|
|
23
|
-
const debug = require('debug')('things-factory:integration-base:operato-connector
|
22
|
+
const debug = require('debug')('things-factory:integration-base:operato-connector')
|
24
23
|
|
25
24
|
const defaultOptions: any = {
|
26
25
|
watchQuery: {
|
@@ -36,10 +35,6 @@ const defaultOptions: any = {
|
|
36
35
|
}
|
37
36
|
}
|
38
37
|
|
39
|
-
const cache = new InMemoryCache({
|
40
|
-
addTypename: false
|
41
|
-
})
|
42
|
-
|
43
38
|
export const GRAPHQL_URI = '/graphql'
|
44
39
|
export const SUBSCRIPTION_URI = GRAPHQL_URI
|
45
40
|
|
@@ -48,7 +43,6 @@ interface SubscriberData {
|
|
48
43
|
scenario: any
|
49
44
|
subscriptionObserver: any
|
50
45
|
}
|
51
|
-
;``
|
52
46
|
|
53
47
|
export class OperatoConnector implements Connector {
|
54
48
|
private context: any
|
@@ -56,11 +50,11 @@ export class OperatoConnector implements Connector {
|
|
56
50
|
async ready(connectionConfigs: InputConnection[]) {
|
57
51
|
await Promise.all(connectionConfigs.map(this.connect.bind(this)))
|
58
52
|
|
59
|
-
ConnectionManager.logger.info('
|
53
|
+
ConnectionManager.logger.info('operato-connector connections are ready')
|
60
54
|
}
|
61
55
|
|
62
56
|
async connect(connection: InputConnection) {
|
63
|
-
|
57
|
+
const {
|
64
58
|
endpoint: uri,
|
65
59
|
params: { authKey, domain, subscriptionHandlers = {} }
|
66
60
|
} = connection
|
@@ -69,7 +63,7 @@ export class OperatoConnector implements Connector {
|
|
69
63
|
throw new Error('some connection paramter missing.')
|
70
64
|
}
|
71
65
|
|
72
|
-
|
66
|
+
const domainOwner = await getRepository(User).findOne({
|
73
67
|
where: {
|
74
68
|
id: connection.domain.owner
|
75
69
|
}
|
@@ -125,20 +119,24 @@ export class OperatoConnector implements Connector {
|
|
125
119
|
}).concat(httpLink)
|
126
120
|
)
|
127
121
|
|
128
|
-
|
122
|
+
const cache = new InMemoryCache({
|
123
|
+
addTypename: false
|
124
|
+
})
|
125
|
+
|
126
|
+
const client = new ApolloClient({
|
129
127
|
defaultOptions,
|
130
128
|
cache,
|
131
129
|
link: splitLink
|
132
130
|
})
|
133
131
|
|
134
|
-
|
132
|
+
const subscriptions: SubscriberData[] = []
|
135
133
|
Object.keys(subscriptionHandlers).forEach(async tag => {
|
136
134
|
if (!tag || !subscriptionHandlers[tag]) return
|
137
135
|
|
138
|
-
|
136
|
+
const scenarioName = subscriptionHandlers[tag]
|
139
137
|
|
140
138
|
// fetch a scenario
|
141
|
-
|
139
|
+
const selectedScenario = await getRepository(Scenario).findOne({
|
142
140
|
where: {
|
143
141
|
name: scenarioName
|
144
142
|
},
|
@@ -156,13 +154,13 @@ export class OperatoConnector implements Connector {
|
|
156
154
|
`
|
157
155
|
})
|
158
156
|
|
159
|
-
|
157
|
+
const subscriptionObserver = subscription.subscribe({
|
160
158
|
next: async data => {
|
161
159
|
debug('received pubsub msg.:', data?.data)
|
162
160
|
await this.runScenario(subscriptions, data?.data?.data)
|
163
161
|
},
|
164
162
|
error: error => {
|
165
|
-
ConnectionManager.logger.error(`(${connection.name}:${connection.endpoint}) subscription error
|
163
|
+
ConnectionManager.logger.error(`(${connection.name}:${connection.endpoint}) subscription error`, error)
|
166
164
|
},
|
167
165
|
complete: () => {
|
168
166
|
ConnectionManager.logger.info(`(${connection.name}:${connection.endpoint}) subscription complete`)
|
@@ -185,18 +183,18 @@ export class OperatoConnector implements Connector {
|
|
185
183
|
ConnectionManager.addConnectionInstance(connection, client)
|
186
184
|
|
187
185
|
ConnectionManager.logger.info(
|
188
|
-
`
|
186
|
+
`operato-connector connection(${connection.name}:${connection.endpoint}) is connected`
|
189
187
|
)
|
190
188
|
}
|
191
189
|
|
192
190
|
async disconnect(connection: InputConnection) {
|
193
|
-
|
194
|
-
|
191
|
+
const client = ConnectionManager.getConnectionInstance(connection)
|
192
|
+
const subscriptions: SubscriberData[] = client['subscriptions']
|
195
193
|
subscriptions.forEach(subscription => subscription.subscriptionObserver.unsubscribe())
|
196
194
|
client.stop()
|
197
195
|
ConnectionManager.removeConnectionInstance(connection)
|
198
196
|
|
199
|
-
ConnectionManager.logger.info(`
|
197
|
+
ConnectionManager.logger.info(`operato-connector connection(${connection.name}) is disconnected`)
|
200
198
|
}
|
201
199
|
|
202
200
|
async runScenario(subscriptions: SubscriberData[], variables: any): Promise<ScenarioInstance> {
|
@@ -207,7 +205,7 @@ export class OperatoConnector implements Connector {
|
|
207
205
|
throw new Error(`tag is invalid - ${tag}`)
|
208
206
|
}
|
209
207
|
|
210
|
-
|
208
|
+
const scenario = subscriptions.find(subscription => subscription.tag === tag)?.scenario
|
211
209
|
if (!scenario) {
|
212
210
|
throw new Error(`scenario is not found - ${tag}`)
|
213
211
|
}
|
@@ -215,15 +213,13 @@ export class OperatoConnector implements Connector {
|
|
215
213
|
if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
216
214
|
const { category, privilege } = scenario.privilege || {}
|
217
215
|
throw new Error(
|
218
|
-
`Unauthorized! ${
|
219
|
-
category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'
|
220
|
-
} required`
|
216
|
+
`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`
|
221
217
|
)
|
222
218
|
}
|
223
219
|
|
224
220
|
/* create a scenario instance */
|
225
|
-
|
226
|
-
|
221
|
+
const instanceName = scenario.name + '-' + String(Date.now())
|
222
|
+
const instance = new ScenarioInstance(instanceName, scenario, {
|
227
223
|
user,
|
228
224
|
domain,
|
229
225
|
variables,
|
@@ -7,7 +7,7 @@ import { InputConnection } from '../../service/connection/connection-type'
|
|
7
7
|
try {
|
8
8
|
var oracledb = require('oracledb')
|
9
9
|
} catch (err) {
|
10
|
-
logger.error('oracledb module loading failed')
|
10
|
+
logger.error('oracledb module loading failed', err)
|
11
11
|
}
|
12
12
|
|
13
13
|
export class OracleConnector implements Connector {
|
@@ -71,7 +71,7 @@ export class OracleConnector implements Connector {
|
|
71
71
|
poolAlias,
|
72
72
|
enableStatistics
|
73
73
|
})
|
74
|
-
|
74
|
+
|
75
75
|
ConnectionManager.addConnectionInstance(connection, {
|
76
76
|
query: async (query, params) => {
|
77
77
|
let dbConnection: any = {}
|
@@ -89,12 +89,10 @@ export class OracleConnector implements Connector {
|
|
89
89
|
await this.recreatePool(connection)
|
90
90
|
}
|
91
91
|
throw e
|
92
|
-
}
|
93
|
-
finally {
|
92
|
+
} finally {
|
94
93
|
await dbConnection.close()
|
95
94
|
}
|
96
95
|
return taskResult
|
97
|
-
|
98
96
|
},
|
99
97
|
execute: async (procedure, params) => {
|
100
98
|
let dbConnection: any = {}
|
@@ -105,7 +103,7 @@ export class OracleConnector implements Connector {
|
|
105
103
|
${procedure}
|
106
104
|
END;`
|
107
105
|
dbConnection = await oracledb.getConnection(poolAlias)
|
108
|
-
|
106
|
+
|
109
107
|
// console.log('\n************* stat after get ****************')
|
110
108
|
// await oracledb.getPool(poolAlias).logStatistics()
|
111
109
|
|
@@ -131,8 +129,7 @@ export class OracleConnector implements Connector {
|
|
131
129
|
await this.recreatePool(connection)
|
132
130
|
}
|
133
131
|
throw e
|
134
|
-
}
|
135
|
-
finally {
|
132
|
+
} finally {
|
136
133
|
await dbConnection.close()
|
137
134
|
|
138
135
|
// console.log('\n************* stat after close ****************')
|
@@ -7,7 +7,7 @@ import { InputConnection } from '../../service/connection/connection-type'
|
|
7
7
|
try {
|
8
8
|
var { Client } = require('pg')
|
9
9
|
} catch (err) {
|
10
|
-
logger.error('postgresql module loading failed')
|
10
|
+
logger.error('postgresql module loading failed', err)
|
11
11
|
}
|
12
12
|
|
13
13
|
export class PostgresqlConnector implements Connector {
|
@@ -55,7 +55,8 @@ export class PostgresqlConnector implements Connector {
|
|
55
55
|
ConnectionManager.logger.info(`PostgresSQL Database(${connection.name}:${database}) at ${endpoint} connected.`)
|
56
56
|
} catch (e) {
|
57
57
|
ConnectionManager.logger.error(
|
58
|
-
`PostgresSQL Database(${connection.name}:${database}) at ${endpoint} not connected
|
58
|
+
`PostgresSQL Database(${connection.name}:${database}) at ${endpoint} not connected.`,
|
59
|
+
e
|
59
60
|
)
|
60
61
|
}
|
61
62
|
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { ConnectionManager } from '../connection-manager'
|
2
|
+
import { Connector } from '../types'
|
3
|
+
import { InputConnection } from '../../service/connection/connection-type'
|
4
|
+
import { connectConnections, disconnectConnections } from '../edge-client'
|
5
|
+
|
6
|
+
/**
|
7
|
+
* This connector is a proxy connector installed on the edge server to manage connections from the host.
|
8
|
+
* It interacts with connections established on the edge server and provides synchronization functionality.
|
9
|
+
*/
|
10
|
+
export class ProxyConnector implements Connector {
|
11
|
+
public static instance = new ProxyConnector()
|
12
|
+
|
13
|
+
async ready(connectionConfigs: InputConnection[]) {
|
14
|
+
await Promise.all(connectionConfigs.map(this.connect.bind(this)))
|
15
|
+
|
16
|
+
ConnectionManager.logger.info('proxy-connector connections are ready')
|
17
|
+
}
|
18
|
+
|
19
|
+
async connect(connection: InputConnection) {
|
20
|
+
// TODO 원래 커넥션과 에지설정을 참고하여, 에지 서버로 CONNECT/DISCONNECT 명령을 보낸다.
|
21
|
+
const proxy = {
|
22
|
+
disconnect: async () => {
|
23
|
+
ConnectionManager.logger.info('[proxy-connector] trying disconnect')
|
24
|
+
await disconnectConnections([connection])
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
await connectConnections([connection])
|
29
|
+
|
30
|
+
ConnectionManager.addConnectionInstance(connection, proxy)
|
31
|
+
|
32
|
+
ConnectionManager.logger.info(`proxy-connector connection(${connection.name}:${connection.endpoint}) is connected`)
|
33
|
+
}
|
34
|
+
|
35
|
+
async disconnect(connection: InputConnection) {
|
36
|
+
const proxy = ConnectionManager.removeConnectionInstance(connection)
|
37
|
+
await proxy.disconnect()
|
38
|
+
|
39
|
+
ConnectionManager.logger.info(`proxy-connector connection(${connection.name}) is disconnected`)
|
40
|
+
}
|
41
|
+
|
42
|
+
get parameterSpec() {
|
43
|
+
return []
|
44
|
+
}
|
45
|
+
|
46
|
+
get taskPrefixes() {
|
47
|
+
return []
|
48
|
+
}
|
49
|
+
|
50
|
+
get description() {
|
51
|
+
return 'Operato Proxy Connector'
|
52
|
+
}
|
53
|
+
}
|
@@ -40,7 +40,7 @@ export class SocketServer implements Connector {
|
|
40
40
|
var logger = ConnectionManager.logger
|
41
41
|
let message = ex.stack ? ex.stack : ex
|
42
42
|
let msg = typeof message == 'object' ? JSON.stringify(message, null, 2) : message
|
43
|
-
logger.error(msg)
|
43
|
+
logger.error(msg, ex)
|
44
44
|
reject(ex)
|
45
45
|
})
|
46
46
|
})
|
@@ -6,11 +6,10 @@ import { ConnectionManager } from '../connection-manager'
|
|
6
6
|
import { Connector } from '../types'
|
7
7
|
import { InputConnection } from '../../service/connection/connection-type'
|
8
8
|
|
9
|
-
|
10
9
|
try {
|
11
10
|
var sqlite3 = require('sqlite3').verbose()
|
12
11
|
} catch (err) {
|
13
|
-
logger.error('sqlite3 module loading failed')
|
12
|
+
logger.error('sqlite3 module loading failed', err)
|
14
13
|
}
|
15
14
|
|
16
15
|
export class SqliteConnector implements Connector {
|
@@ -29,9 +28,7 @@ export class SqliteConnector implements Connector {
|
|
29
28
|
|
30
29
|
var database = new sqlite3.Database(endpoint, sqlite3.OPEN_READWRITE, err => {
|
31
30
|
if (err) {
|
32
|
-
ConnectionManager.logger.error(
|
33
|
-
`SQLite Database(${connection.name}) at ${endpoint} not connected.\ncause: ${err}`
|
34
|
-
)
|
31
|
+
ConnectionManager.logger.error(`SQLite Database(${connection.name}) at ${endpoint} not connected.`, err)
|
35
32
|
return
|
36
33
|
}
|
37
34
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { Connection } from '../service/connection/connection-type'
|
2
|
+
import { Step } from '../service/step/step-type'
|
3
|
+
import { Context, TaskHandler } from './types'
|
4
|
+
|
5
|
+
export type EdgeClient = {
|
6
|
+
handler: TaskHandler
|
7
|
+
syncConnections(connections: Connection[], context?: ResolverContext): Promise<any>
|
8
|
+
connectConnections(connections: Connection[], context?: ResolverContext): Promise<any>
|
9
|
+
disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any>
|
10
|
+
}
|
11
|
+
|
12
|
+
var edgeClient: EdgeClient = {
|
13
|
+
async handler(step: Step, scenarioContext: Context) {
|
14
|
+
throw 'edgeClient not supported'
|
15
|
+
},
|
16
|
+
async syncConnections(connections: Connection[], context: ResolverContext): Promise<any> {
|
17
|
+
throw 'edgeClient not supported'
|
18
|
+
},
|
19
|
+
async connectConnections(connections: Connection[], context: ResolverContext): Promise<any> {
|
20
|
+
throw 'edgeClient not supported'
|
21
|
+
},
|
22
|
+
async disconnectConnections(connections: Connection[], context: ResolverContext): Promise<any> {
|
23
|
+
throw 'edgeClient not supported'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
export async function handler(step: Step, scenarioContext: Context) {
|
28
|
+
return await edgeClient.handler(step, scenarioContext)
|
29
|
+
}
|
30
|
+
|
31
|
+
export async function syncConnections(connections: Connection[], context?: ResolverContext): Promise<any> {
|
32
|
+
return await edgeClient.syncConnections(connections, context)
|
33
|
+
}
|
34
|
+
|
35
|
+
export async function connectConnections(connections: Connection[], context?: ResolverContext): Promise<any> {
|
36
|
+
return await edgeClient.connectConnections(connections, context)
|
37
|
+
}
|
38
|
+
|
39
|
+
export async function disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any> {
|
40
|
+
return await edgeClient.disconnectConnections(connections, context)
|
41
|
+
}
|
42
|
+
|
43
|
+
export function setEdgeClient(edge: EdgeClient) {
|
44
|
+
edgeClient = edge
|
45
|
+
}
|
package/server/engine/index.ts
CHANGED
@@ -5,5 +5,6 @@ export * from './connection-manager'
|
|
5
5
|
export * from './scenario-engine'
|
6
6
|
export * from './task-registry'
|
7
7
|
export * from './analyzer/analyze-integration'
|
8
|
+
export * from './edge-client'
|
8
9
|
|
9
|
-
export { Connector } from './types'
|
10
|
+
export { Connector, Context, TaskHandler } from './types'
|