|
@@ -2,6 +2,7 @@ import { SubstrateEvent } from '@dzlzv/hydra-common'
|
|
|
import { DatabaseManager } from '@dzlzv/hydra-db-utils'
|
|
|
import { FindConditions } from 'typeorm'
|
|
|
import { Bytes } from '@polkadot/types'
|
|
|
+import { fixBlockTimestamp } from './eventFix'
|
|
|
|
|
|
import {
|
|
|
inconsistentState,
|
|
@@ -47,7 +48,7 @@ export async function storageWorkingGroup_TerminatedWorker(db: DatabaseManager,
|
|
|
const {workerId} = new StorageWorkingGroup.TerminatedWorkerEvent(event).data
|
|
|
|
|
|
// call generic processing
|
|
|
- await workingGroup_TerminatedWorker(db, WorkerType.STORAGE, workerId)
|
|
|
+ await workingGroup_TerminatedWorker(db, event, WorkerType.STORAGE, workerId)
|
|
|
}
|
|
|
|
|
|
export async function storageWorkingGroup_WorkerExited(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
|
|
@@ -55,7 +56,7 @@ export async function storageWorkingGroup_WorkerExited(db: DatabaseManager, even
|
|
|
const {workerId} = new StorageWorkingGroup.WorkerExitedEvent(event).data
|
|
|
|
|
|
// call generic processing
|
|
|
- await workingGroup_WorkerExited(db, WorkerType.STORAGE, workerId)
|
|
|
+ await workingGroup_WorkerExited(db, event, WorkerType.STORAGE, workerId)
|
|
|
}
|
|
|
|
|
|
export async function storageWorkingGroup_TerminatedLeader(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
|
|
@@ -63,7 +64,7 @@ export async function storageWorkingGroup_TerminatedLeader(db: DatabaseManager,
|
|
|
const {workerId} = new StorageWorkingGroup.TerminatedLeaderEvent(event).data
|
|
|
|
|
|
// call generic processing
|
|
|
- await workingGroup_TerminatedLeader(db, WorkerType.STORAGE, workerId)
|
|
|
+ await workingGroup_TerminatedLeader(db, event, WorkerType.STORAGE, workerId)
|
|
|
}
|
|
|
|
|
|
/////////////////// Gateway working group //////////////////////////////////////
|
|
@@ -89,7 +90,7 @@ export async function gatewayWorkingGroup_TerminatedWorker(db: DatabaseManager,
|
|
|
const {workerId} = new GatewayWorkingGroup.TerminatedWorkerEvent(event).data
|
|
|
|
|
|
// call generic processing
|
|
|
- await workingGroup_TerminatedWorker(db, WorkerType.GATEWAY, workerId)
|
|
|
+ await workingGroup_TerminatedWorker(db, event, WorkerType.GATEWAY, workerId)
|
|
|
}
|
|
|
|
|
|
export async function gatewayWorkingGroup_WorkerExited(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
|
|
@@ -97,7 +98,7 @@ export async function gatewayWorkingGroup_WorkerExited(db: DatabaseManager, even
|
|
|
const {workerId} = new GatewayWorkingGroup.WorkerExitedEvent(event).data
|
|
|
|
|
|
// call generic processing
|
|
|
- await workingGroup_WorkerExited(db, WorkerType.GATEWAY, workerId)
|
|
|
+ await workingGroup_WorkerExited(db, event, WorkerType.GATEWAY, workerId)
|
|
|
}
|
|
|
|
|
|
export async function gatewayWorkingGroup_TerminatedLeader(db: DatabaseManager, event: SubstrateEvent): Promise<void> {
|
|
@@ -105,7 +106,7 @@ export async function gatewayWorkingGroup_TerminatedLeader(db: DatabaseManager,
|
|
|
const {workerId} = new GatewayWorkingGroup.TerminatedLeaderEvent(event).data
|
|
|
|
|
|
// call generic processing
|
|
|
- await workingGroup_TerminatedLeader(db, WorkerType.GATEWAY, workerId)
|
|
|
+ await workingGroup_TerminatedLeader(db, event, WorkerType.GATEWAY, workerId)
|
|
|
}
|
|
|
|
|
|
/////////////////// Generic working group processing ///////////////////////////
|
|
@@ -148,25 +149,25 @@ export async function workingGroup_WorkerStorageUpdated(db: DatabaseManager, wor
|
|
|
logger.info("Worker has been updated", {workerId, workerType})
|
|
|
}
|
|
|
|
|
|
-export async function workingGroup_TerminatedWorker(db: DatabaseManager, workerType: WorkerType, workerId: WorkerId): Promise<void> {
|
|
|
+export async function workingGroup_TerminatedWorker(db: DatabaseManager, event: SubstrateEvent, workerType: WorkerType, workerId: WorkerId): Promise<void> {
|
|
|
// do removal logic
|
|
|
- await deactivateWorker(db, workerType, workerId)
|
|
|
+ await deactivateWorker(db, event, workerType, workerId)
|
|
|
|
|
|
// emit log event
|
|
|
logger.info("Worker has been removed (worker terminated)", {workerId, workerType})
|
|
|
}
|
|
|
|
|
|
-export async function workingGroup_WorkerExited(db: DatabaseManager, workerType: WorkerType, workerId: WorkerId): Promise<void> {
|
|
|
+export async function workingGroup_WorkerExited(db: DatabaseManager, event: SubstrateEvent, workerType: WorkerType, workerId: WorkerId): Promise<void> {
|
|
|
// do removal logic
|
|
|
- await deactivateWorker(db, workerType, workerId)
|
|
|
+ await deactivateWorker(db, event, workerType, workerId)
|
|
|
|
|
|
// emit log event
|
|
|
logger.info("Worker has been removed (worker exited)", {workerId, workerType})
|
|
|
}
|
|
|
|
|
|
-export async function workingGroup_TerminatedLeader(db: DatabaseManager, workerType: WorkerType, workerId: WorkerId): Promise<void> {
|
|
|
+export async function workingGroup_TerminatedLeader(db: DatabaseManager, event: SubstrateEvent, workerType: WorkerType, workerId: WorkerId): Promise<void> {
|
|
|
// do removal logic
|
|
|
- await deactivateWorker(db, workerType, workerId)
|
|
|
+ await deactivateWorker(db, event, workerType, workerId)
|
|
|
|
|
|
// emit log event
|
|
|
logger.info("Working group leader has been removed (worker exited)", {workerId, workerType})
|
|
@@ -180,17 +181,22 @@ async function createWorker(
|
|
|
workerType: WorkerType,
|
|
|
event: SubstrateEvent,
|
|
|
): Promise<void> {
|
|
|
+ // create entity
|
|
|
const newWorker = new Worker({
|
|
|
id: createPredictableId(event, workerType),
|
|
|
workerId: workerId.toString(),
|
|
|
type: workerType,
|
|
|
isActive: true,
|
|
|
+
|
|
|
+ createdAt: new Date(fixBlockTimestamp(event.blockTimestamp).toNumber()),
|
|
|
+ updatedAt: new Date(fixBlockTimestamp(event.blockTimestamp).toNumber()),
|
|
|
})
|
|
|
|
|
|
+ // save worker
|
|
|
await db.save<Worker>(newWorker)
|
|
|
}
|
|
|
|
|
|
-async function deactivateWorker(db: DatabaseManager, workerType: WorkerType, workerId: WorkerId) {
|
|
|
+async function deactivateWorker(db: DatabaseManager, event: SubstrateEvent, workerType: WorkerType, workerId: WorkerId) {
|
|
|
// load worker
|
|
|
const worker = await db.get(Worker, {
|
|
|
where: {
|
|
@@ -204,7 +210,12 @@ async function deactivateWorker(db: DatabaseManager, workerType: WorkerType, wor
|
|
|
return inconsistentState('Non-existing worker deletion requested', workerId)
|
|
|
}
|
|
|
|
|
|
+ // update worker
|
|
|
worker.isActive = false
|
|
|
|
|
|
+ // set last update time
|
|
|
+ worker.updatedAt = new Date(fixBlockTimestamp(event.blockTimestamp).toNumber()),
|
|
|
+
|
|
|
+ // save worker
|
|
|
await db.save<Worker>(worker)
|
|
|
}
|