blob: af74d258388614c5e9e3661934314909f36475bf [file] [view]
# How plugin work?
- 1. Plugin Worker is triggered by Apps. Use queue producer to push a plugin task into queue with plugin name and data
```
producer.add('Jira', {host:'', username: '', password: ''});
```
- 2. Plugin is Loaded in Queue Consumer. the nestjs IOC framework would help to get a instance of Plugin
```
moduleRef.resolve('Jira', contextId, {strict: false});
```
- 3. Plugin resolve self with a Task DAG.
- 4. A Task Service will read the Task DAG and start a Session to manage tasks execution
- 5. Task Service push task into queue service with task name and task data
```
producer.add('JiraIssueCollector', {host:'', username: '', password: ''});
```
- 6. Task Service recived the task completed events and check if has next task. the do step 5. if no task anymore finished the pipline
```
on('job:finished', (jobId, datas) => { producer.add('JiraLeadtimeEnricher', datas); });
```
# How plugin dependency described
- Plugin is the organizer, Described what Entities would exports.
- Entities may have one Task to exports. a task is one of collector or enricher.
- The task would required some Entities, that should Import in Task
```
@Imports([RequiredEntity, AnotherReuqired.Entity])
@Exports(SampleEntity)
class SampleEnricher implements Task {
async execute(): Promise<any> {
//do enrich here
return {};
}
}
```
- Only one Entity should be Exports in Task
- Dependency Resolver would get the Task DAG for task exexution managment.
# How to manage the Entities in Plugin
- One Task With The Exports Entities
- task.ts
- task.entity.ts
- task.spec.ts
- All migrates should put at /plugins/YourPlugin/src/migrates, generator your migrate file with typeorm
```typeorm migrate:create -d /plugins/YourPlugin/src/migrates -n mymigrate````