1.0.0-feature-63b8b1-khoonp85 • Published 5 years ago

@atlas-engine/atlas_engine_sdk v1.0.0-feature-63b8b1-khoonp85

Weekly downloads
474
License
MIT
Repository
github
Last release
5 years ago

Atlas Engine SDK

Extensions

Die Atlas Engine bietet einen Mechanismus an, um interne Funktionalitäten mithilfe von Extensions zu erweitern.

Beispiel

Unter ./sample/extension ist eine Beispiel-Implementierung einer Extension in TypeScript zu finden.

Diese lässt sich folgendermaßen Starten:

# Installieren der abhängigen Pakete
npm ci --prefix sample/extension
# Starten einer Atlas Engine, die als extensionsDir den sample-Ordner verwendet
npm start --prefix sample/extension

Im Log lässt sich nachvollziehen, dass die Extension erfolgreich geladen wurde:

2020-11-19T09:28:49.538Z - info: [atlasengine:extension:sample] Loading extension...
2020-11-19T09:28:49.538Z - info: [atlasengine:extension:sample] Finished loading.
2020-11-19T09:28:49.538Z - info: [atlasengine:extension] Loaded extension sample_extension version 1.0.0.

Die Sample-Extension registriert eine Event-Middleware auf dem Atlas-Engine-Objekt, die für jedes Event den Event-Typ in den Log schreibt. Wenn z.B. ein Prozess auf der Engine unter localhost:8000 gestartet wird, sollte im Log folgendes zu sehen sein:

2020-11-19T09:31:46.628Z - info: [atlasengine:extension:sample] Received event OnFlowNodeEntered
2020-11-19T09:31:46.634Z - info: [atlasengine:extension:sample] Received event OnFlowNodeExited
2020-11-19T09:31:46.641Z - info: [atlasengine:extension:sample] Received event OnProcessFinished

Laden von Extensions

Standardmäßig werden Extensions aus dem Ordner ${HOME}/.atlas/engine/extensions geladen. Der Pfad lässt sich mit dem Startup-Parameter --extensionsDir ändern:

Sowohl beim Start über die CLI:

atlas-engine --extensionsDir '/my/custom/extensions/dir'

Als auch beim Start als embedded Software:

await AtlasEngine.launch({
  extensionsDir: '/my/custom/extensions/dir',
});

Innerhalb des extensionsDir werden Extensions als Ordner erwartet.

tree -L 2 ${HOME}/.atlas/engine/extensions
├── extension01
│   ├── index.js
│   ├── node_modules
│   ├── package-lock.json
│   └── package.json
└── extension02
    ├── index.js
    ├── node_modules
    ├── package-lock.json
    └── package.json

Struktureller Aufbau einer Extension

Jede Extension muss mindestens eine eigene package.json mit name, version und main enthalten.

cat ${HOME}/.atlas/engine/extensions/extension01/package.json
{
  "name": "extension01",
  "version": "1.0.0",
  "main": "index.js"
}

main muss auf eine gültige JavaScript-Datei zeigen, die als Einstiegspunkt zum Laden der Extension verwendet werden kann.

cat ${HOME}/.atlas/engine/extensions/extension01/index.js 
exports.onLoad = (engine) => {
  engine.registerEventMiddleware((event) => {
    console.log(`${__filename} received event: ${event.eventType}`);
  });
}

Extensions können eine onLoad-Funktion exportieren, die von der Engine beim Laden mit einem Atlas-Engine-Objekt aufgerufen wird.

exports.onLoad = (engine) => {
  engine.registerEventMiddleware((event) => {
    console.log(`${__filename} received event: ${event.eventType}`);
  });

  return Promise.resolve();
};

Verwendung des SDKs

Das SDK stellt alle Atlas-Engine-Typen bereit, die verwendet werden können um eine Extension in TypeScript zu entwickeln.

npm i --save @atlas-engine/atlas_engine_sdk

Beispiel:

import {AtlasEngine, AtlasEngineEvent, onLoadFunction} from '@atlas-engine/atlas_engine_sdk';

export const onLoad: onLoadFunction = (engine: AtlasEngine) => {
  engine.registerEventMiddleware(onAtlasEngineEvent);
  return Promise.resolve();
};

function onAtlasEngineEvent(event: AtlasEngineEvent): Promise<void> {
  return Promise.resolve();
}

Das Atlas-Engine-Objekt

Auf dem Atlas-Engine-Objekt werden verschiedene Funktionen bereitgestellt, die eine Interaktion mit der Engine ermöglichen.

registerEventMiddleware

Mit registerEventMiddleware kann sich eine Extensions als Middleware für Atlas-Engine-Events registrieren. Der Funktion wird eine callback-Funktion übergeben, die jedes Mal mit dem aktuellem AtlasEngineEvent aufgerufen wird, wenn in der Engine ein Log-Event auftritt:

import {AtlasEngine, AtlasEngineEvent, onLoadFunction} from '@atlas-engine/atlas_engine_sdk';
import {Logger} from 'loggerhythm';

const logger = Logger.createLogger('atlasengine:extension:sample');

export const onLoad: onLoadFunction = (engine: AtlasEngine) => {
  // Die Funktion `onAtlasEngineEvent` wird als Event-Middleware registriert
  engine.registerEventMiddleware(onAtlasEngineEvent);
  return Promise.resolve();
};

function onAtlasEngineEvent(event: AtlasEngineEvent): Promise<void> {
  // Jedes Log-Event das auftritt ruft die Funktion mit dem aktuellem Event auf
  logger.info(`Received event ${event.eventType}`);

  return Promise.resolve();
}

TODO: Weitere Funktionalitäten beschreiben

Logging

Damit das Logging der Extension einheitlich zu dem Log der Atlas Engine passt, empfiehlt es sich den Logger loggerhytm zu verwenden.

npm i --save loggerhytm

index.ts:

import {AtlasEngine, AtlasEngineEvent, onLoadFunction} from '@atlas-engine/atlas_engine_sdk';
import {Logger} from 'loggerhythm';

// Beim Erstellen des Loggers kann ein Namespace angegeben werden, der beim Logging verwendet wird.
// sample sollte durch den Namen der Extension ersetzt werden
const logger = Logger.createLogger('atlasengine:extension:sample');

export const onLoad: onLoadFunction = (engine: AtlasEngine) => {
  logger.info('Loading extension...');

  return Promise.resolve();
};
3.3.4

2 years ago

3.3.3

2 years ago

3.3.2

2 years ago

3.3.0

3 years ago

3.4.0-alpha.1

3 years ago

3.3.0-beta.2

3 years ago

3.3.0-beta.1

3 years ago

3.3.0-beta.4

3 years ago

3.3.0-beta.3

3 years ago

3.3.0-alpha.11

3 years ago

3.2.6

3 years ago

3.2.5

3 years ago

3.2.4

3 years ago

3.3.0-alpha.6

3 years ago

3.3.0-alpha.9

3 years ago

3.3.0-alpha.8

3 years ago

3.3.0-alpha.7

3 years ago

3.3.0-alpha.10

3 years ago

3.2.2

3 years ago

3.2.1

3 years ago

3.2.0

3 years ago

3.3.0-alpha.2

3 years ago

3.3.0-alpha.1

3 years ago

3.2.3

3 years ago

3.3.0-alpha.5

3 years ago

3.3.0-alpha.4

3 years ago

3.3.0-alpha.3

3 years ago

3.2.0-alpha.13

3 years ago

3.2.0-alpha.14

3 years ago

3.2.0-alpha.11

3 years ago

3.2.0-alpha.12

3 years ago

3.2.0-beta.5

3 years ago

3.1.0

3 years ago

3.1.0-beta.2

3 years ago

3.1.0-beta.3

3 years ago

3.1.0-beta.4

3 years ago

3.1.0-beta.5

3 years ago

3.1.0-beta.6

3 years ago

3.1.0-alpha.10

3 years ago

3.1.0-alpha.11

3 years ago

3.1.0-alpha.12

3 years ago

3.1.0-alpha.9

3 years ago

3.1.0-alpha.5

3 years ago

3.1.0-alpha.6

3 years ago

3.1.0-alpha.7

3 years ago

3.1.0-alpha.8

3 years ago

3.0.1

3 years ago

3.2.0-alpha.4

3 years ago

3.2.0-alpha.5

3 years ago

3.2.0-alpha.6

3 years ago

3.2.0-alpha.7

3 years ago

3.2.0-alpha.8

3 years ago

3.2.0-alpha.9

3 years ago

3.2.0-alpha.1

3 years ago

3.2.0-alpha.2

3 years ago

3.2.0-alpha.3

3 years ago

3.2.0-alpha.10

3 years ago

3.2.0-beta.4

3 years ago

3.2.0-beta.2

3 years ago

3.2.0-beta.3

3 years ago

3.2.0-beta.1

3 years ago

3.1.0-beta.1

3 years ago

3.1.0-alpha.1

3 years ago

3.1.0-alpha.2

3 years ago

3.1.0-alpha.3

3 years ago

3.1.0-alpha.4

3 years ago

3.0.0-beta.3

3 years ago

3.0.0-beta.4

3 years ago

3.0.0

3 years ago

3.0.0-alpha.7

3 years ago

3.0.0-alpha.6

3 years ago

3.0.0-alpha.9

3 years ago

3.0.0-alpha.8

3 years ago

3.0.0-alpha.3

3 years ago

3.0.0-alpha.5

3 years ago

3.0.0-alpha.4

3 years ago

2.4.0

4 years ago

3.0.0-beta.1

3 years ago

3.0.0-beta.2

3 years ago

2.3.3

4 years ago

2.4.0-beta.3

4 years ago

2.4.0-beta.2

4 years ago

2.4.0-beta.1

4 years ago

3.0.0-alpha.1

3 years ago

3.0.0-alpha.2

3 years ago

2.4.0-alpha.2

4 years ago

2.4.0-alpha.1

4 years ago

2.4.0-alpha.4

4 years ago

2.4.0-alpha.3

4 years ago

2.4.0-alpha.6

4 years ago

2.4.0-alpha.5

4 years ago

2.4.0-alpha.8

4 years ago

2.4.0-alpha.7

4 years ago

2.3.3-beta.1

4 years ago

2.3.3-alpha.2

4 years ago

2.3.3-alpha.1

4 years ago

2.3.0

4 years ago

2.3.2

4 years ago

2.3.1

4 years ago

2.3.1-beta.1

4 years ago

2.3.1-alpha.1

4 years ago

2.2.0-alpha.10

4 years ago

2.2.0

4 years ago

2.3.0-beta.1

4 years ago

2.3.0-beta.4

4 years ago

2.3.0-beta.2

4 years ago

2.3.0-beta.3

4 years ago

2.2.0-alpha.8

4 years ago

2.2.0-alpha.9

4 years ago

2.2.0-beta.5

4 years ago

2.2.0-beta.6

4 years ago

2.2.0-beta.7

4 years ago

2.3.0-alpha.2

4 years ago

2.3.0-alpha.3

4 years ago

2.3.0-alpha.1

4 years ago

2.3.0-alpha.8

4 years ago

2.3.0-alpha.9

4 years ago

2.3.0-alpha.6

4 years ago

2.3.0-alpha.7

4 years ago

2.3.0-alpha.4

4 years ago

2.3.0-alpha.5

4 years ago

2.3.0-alpha.10

4 years ago

2.3.0-alpha.13

4 years ago

2.3.0-alpha.14

4 years ago

2.3.0-alpha.11

4 years ago

2.3.0-alpha.12

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.2.0-alpha.7

4 years ago

2.2.0-alpha.6

4 years ago

2.2.0-alpha.4

4 years ago

2.2.0-alpha.3

4 years ago

2.2.0-beta.3

4 years ago

2.2.0-beta.4

4 years ago

2.1.0

4 years ago

2.2.0-alpha.2

4 years ago

2.2.0-alpha.1

4 years ago

2.2.0-beta.1

4 years ago

2.2.0-beta.2

4 years ago

2.1.0-beta.2

4 years ago

2.0.6

4 years ago

2.1.0-alpha.5

4 years ago

2.1.0-beta.1

4 years ago

2.1.0-alpha.4

4 years ago

2.1.0-alpha.3

4 years ago

2.0.5-beta.1

4 years ago

2.0.5

4 years ago

2.1.0-alpha.2

4 years ago

2.1.0-alpha.1

4 years ago

2.0.3-alpha.1

4 years ago

2.0.4-beta.1

4 years ago

2.0.4-alpha.1

4 years ago

2.0.3

4 years ago

2.0.4

4 years ago

2.0.2-beta.1

4 years ago

2.0.2

4 years ago

2.0.2-alpha.1

4 years ago

2.0.1-beta.1

4 years ago

2.0.1-alpha.1

4 years ago

2.0.1

4 years ago

2.0.0-alpha.16

4 years ago

2.0.0-alpha.15

4 years ago

2.0.0

4 years ago

2.0.0-beta.5

4 years ago

2.0.0-beta.4

4 years ago

2.0.0-alpha.14

4 years ago

2.0.0-alpha.13

4 years ago

2.0.0-alpha.12

4 years ago

2.0.0-beta.3

4 years ago

2.0.0-alpha.11

4 years ago

2.0.0-alpha.10

4 years ago

2.0.0-alpha.9

5 years ago

1.3.9

5 years ago

2.0.0-beta.2

5 years ago

2.0.0-alpha.7

5 years ago

2.0.0-alpha.8

5 years ago

2.0.0-alpha.6

5 years ago

2.0.0-beta.1

5 years ago

2.0.0-alpha.4

5 years ago

2.0.0-alpha.5

5 years ago

1.3.8-beta.1

5 years ago

1.3.8

5 years ago

2.0.0-alpha.3

5 years ago

2.0.0-alpha.1

5 years ago

2.0.0-alpha.2

5 years ago

1.3.7

5 years ago

1.3.7-beta.1

5 years ago

1.4.0-alpha.4

5 years ago

1.3.5-alpha.1

5 years ago

1.3.3-beta.1

5 years ago

1.3.5-beta.1

5 years ago

1.3.6-beta.1

5 years ago

1.3.6

5 years ago

1.3.5

5 years ago

1.3.4

5 years ago

1.3.3

5 years ago

1.3.4-alpha.1

5 years ago

1.3.4-beta.1

5 years ago

1.3.6-alpha.1

5 years ago

1.3.3-alpha.1

5 years ago

1.3.2-beta.1

5 years ago

1.3.2-alpha.1

5 years ago

1.3.2

5 years ago

1.4.0-alpha.3

5 years ago

1.3.1-beta.1

5 years ago

1.4.0-alpha.2

5 years ago

1.3.1

5 years ago

1.3.0-beta.4

5 years ago

1.4.0-alpha.1

5 years ago

1.3.0

5 years ago

1.3.0-alpha.6

5 years ago

1.3.0-beta.3

5 years ago

1.3.0-alpha.5

5 years ago

1.3.0-alpha.4

5 years ago

1.3.0-beta.2

5 years ago

1.3.0-alpha.3

5 years ago

1.3.0-alpha.2

5 years ago

1.3.0-beta.1

5 years ago

1.2.0

5 years ago

1.3.0-alpha.1

5 years ago

1.2.0-beta.4

5 years ago

1.2.0-beta.3

5 years ago

1.2.0-alpha.6

5 years ago

1.2.0-alpha.5

5 years ago

1.2.0-alpha.4

5 years ago

1.2.0-beta.2

5 years ago

1.2.0-alpha.3

5 years ago

1.2.0-alpha.2

5 years ago

1.2.0-beta.1

5 years ago

1.2.0-alpha.1

5 years ago

1.1.0

5 years ago

1.1.0-beta.1

5 years ago

1.1.0-alpha.2

5 years ago

1.1.0-alpha.1

5 years ago

1.0.0

5 years ago

1.0.0-alpha.8

5 years ago

1.0.0-beta.4

5 years ago

1.0.0-alpha.7

5 years ago

1.0.0-beta.3

5 years ago

1.0.0-alpha.6

5 years ago

1.0.0-beta.2

5 years ago

1.0.0-beta.1

5 years ago

1.0.0-alpha.5

5 years ago

1.0.0-alpha.4

5 years ago

1.0.0-alpha.3

5 years ago

1.0.0-alpha.1

5 years ago