Alexey Velikiy
6 years ago
committed by
GitHub
3 changed files with 77 additions and 76 deletions
@ -1,74 +0,0 @@ |
|||||||
import * as AnalyticsController from '../controllers/analytics_controller'; |
|
||||||
import { AnalyticUnitId } from '../models/analytic_unit_model'; |
|
||||||
|
|
||||||
import * as Router from 'koa-router'; |
|
||||||
import * as _ from 'lodash'; |
|
||||||
|
|
||||||
export enum DetectionState { |
|
||||||
READY = 'READY', |
|
||||||
RUNNING = 'RUNNING', |
|
||||||
FAILED = 'FAILED' |
|
||||||
} |
|
||||||
|
|
||||||
declare type DetectionStatus = { |
|
||||||
id: AnalyticUnitId, |
|
||||||
from: number, |
|
||||||
to: number, |
|
||||||
state: DetectionState |
|
||||||
} |
|
||||||
|
|
||||||
declare type DetectionStatusResponse = { |
|
||||||
timeranges: DetectionStatus[] |
|
||||||
} |
|
||||||
|
|
||||||
let runnnedDetections: DetectionStatus[] = []; |
|
||||||
|
|
||||||
export async function getDetectionStatus(ctx: Router.IRouterContext) { |
|
||||||
let id: AnalyticUnitId = ctx.request.query.id; |
|
||||||
if(id === undefined || id === '') { |
|
||||||
throw new Error('analyticUnitId (id) is missing'); |
|
||||||
} |
|
||||||
|
|
||||||
let from: number = +ctx.request.query.from; |
|
||||||
if(isNaN(from) || ctx.request.query.from === '') { |
|
||||||
throw new Error(`from is missing or corrupted (got ${ctx.request.query.from})`); |
|
||||||
} |
|
||||||
let to: number = +ctx.request.query.to; |
|
||||||
if(isNaN(to) || ctx.request.query.to === '') { |
|
||||||
throw new Error(`to is missing or corrupted (got ${ctx.request.query.to})`); |
|
||||||
} |
|
||||||
|
|
||||||
const previousRun = _.find(runnnedDetections, {id, from, to}); |
|
||||||
if(previousRun !== undefined) { |
|
||||||
ctx.response.body = { |
|
||||||
timeranges: [ |
|
||||||
previousRun |
|
||||||
] |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
const currentRun = { |
|
||||||
id, |
|
||||||
from, |
|
||||||
to, |
|
||||||
state: DetectionState.RUNNING |
|
||||||
}; |
|
||||||
runnnedDetections.push(currentRun); |
|
||||||
|
|
||||||
AnalyticsController.runDetect(id, from, to) |
|
||||||
.then(() => _.find(runnnedDetections, {id, from, to}).state = DetectionState.READY) |
|
||||||
.catch(err => { |
|
||||||
console.error(err); |
|
||||||
_.find(runnnedDetections, {id, from, to}).state = DetectionState.FAILED; |
|
||||||
}); |
|
||||||
|
|
||||||
ctx.response.body = { |
|
||||||
timeranges: [ |
|
||||||
currentRun |
|
||||||
] |
|
||||||
}; |
|
||||||
} |
|
||||||
|
|
||||||
export const router = new Router(); |
|
||||||
|
|
||||||
router.get('/', getDetectionStatus); |
|
@ -0,0 +1,75 @@ |
|||||||
|
import * as AnalyticsController from '../controllers/analytics_controller'; |
||||||
|
import { AnalyticUnitId } from '../models/analytic_unit_model'; |
||||||
|
|
||||||
|
import * as Router from 'koa-router'; |
||||||
|
import * as _ from 'lodash'; |
||||||
|
|
||||||
|
|
||||||
|
// TODO: move this to analytics_controller
|
||||||
|
export enum DetectionStatus { |
||||||
|
READY = 'READY', |
||||||
|
RUNNING = 'RUNNING', |
||||||
|
FAILED = 'FAILED' |
||||||
|
} |
||||||
|
|
||||||
|
// TODO: move this to analytics_controller
|
||||||
|
declare type DetectionSpan = { |
||||||
|
id: AnalyticUnitId, |
||||||
|
from: number, |
||||||
|
to: number, |
||||||
|
status: DetectionStatus |
||||||
|
} |
||||||
|
|
||||||
|
declare type DetectionSpansResponse = { |
||||||
|
spans: DetectionSpan[] |
||||||
|
} |
||||||
|
|
||||||
|
// TODO: move this to analytics_controller
|
||||||
|
let runningDetectionSpans: DetectionSpan[] = []; |
||||||
|
|
||||||
|
export async function getDetectionSpans(ctx: Router.IRouterContext) { |
||||||
|
let id: AnalyticUnitId = ctx.request.query.id; |
||||||
|
if(id === undefined || id === '') { |
||||||
|
throw new Error('analyticUnitId (id) is missing'); |
||||||
|
} |
||||||
|
|
||||||
|
let from: number = +ctx.request.query.from; |
||||||
|
if(isNaN(from) || ctx.request.query.from === '') { |
||||||
|
throw new Error(`from is missing or corrupted (got ${ctx.request.query.from})`); |
||||||
|
} |
||||||
|
let to: number = +ctx.request.query.to; |
||||||
|
if(isNaN(to) || ctx.request.query.to === '') { |
||||||
|
throw new Error(`to is missing or corrupted (got ${ctx.request.query.to})`); |
||||||
|
} |
||||||
|
|
||||||
|
let response: DetectionSpansResponse = { spans: [] } |
||||||
|
|
||||||
|
// TODO: move this to analytics_controller
|
||||||
|
// TODO: what if we are inside a running span?
|
||||||
|
// TODO: this find will not find anything because of status field, use an id instead
|
||||||
|
const previousRun = _.find(runningDetectionSpans, { id, from, to }); |
||||||
|
if(previousRun !== undefined) { |
||||||
|
response.spans.push(previousRun); |
||||||
|
} |
||||||
|
|
||||||
|
const currentRun: DetectionSpan = { id, from, to, status: DetectionStatus.RUNNING }; |
||||||
|
runningDetectionSpans.push(currentRun); |
||||||
|
|
||||||
|
// TODO: move this to analytics_controller
|
||||||
|
AnalyticsController.runDetect(id, from, to) |
||||||
|
.then(() => { |
||||||
|
// TODO: this find will not find anything because of status field, use an id instead
|
||||||
|
_.find(runningDetectionSpans, { id, from, to }).status = DetectionStatus.READY |
||||||
|
}) |
||||||
|
.catch(err => { |
||||||
|
console.error(err); |
||||||
|
// TODO: this find will not find anything because of status field, use an id instead
|
||||||
|
_.find(runningDetectionSpans, { id, from, to }).status = DetectionStatus.FAILED; |
||||||
|
}); |
||||||
|
|
||||||
|
ctx.response.body = response; |
||||||
|
} |
||||||
|
|
||||||
|
export const router = new Router(); |
||||||
|
|
||||||
|
router.get('/spans', getDetectionSpans); |
Loading…
Reference in new issue