Browse Source

upper/lower bound in anomaly hsr

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
ee893d223c
  1. 21
      client/src/components/Graph.vue
  2. 2
      client/src/components/pods/hastic_pod.ts
  3. 6
      client/src/services/analytics.service.ts
  4. 2
      client/src/views/Home.vue
  5. 6
      server/src/services/analytic_service/analytic_unit/anomaly_analytic_unit.rs
  6. 3
      server/src/services/analytic_service/types.rs

21
client/src/components/Graph.vue

@ -21,7 +21,7 @@ import _ from "lodash";
import { AnalyticUnitType } from '@/types/analytic_units';
import { defineComponent, watch } from 'vue';
import { getHSR } from "@/services/analytics.service";
import { getHSRAnomaly } from "@/services/analytics.service";
// TODO: move to store
async function resolveDataPatterns(range: TimeRange): Promise<{
@ -86,6 +86,7 @@ async function resolveDataThreshold(range: TimeRange): Promise<{
// TODO: remove code repetition
async function resolveDataAnomaly(range: TimeRange): Promise<{
timeserie: LineTimeSerie[],
segments: Segment[]
}> {
@ -98,11 +99,25 @@ async function resolveDataAnomaly(range: TimeRange): Promise<{
// TODO: request in parallel
let [target, values] = await getMetrics(startTime, endTime, step);
let segments = await getSegments(startTime, endTime, false);
let hsr = await getHSR(startTime, endTime);
let hsr = await getHSRAnomaly(startTime, endTime);
return {
timeserie: [
{ target: target, datapoints: values, color: 'green' },
{ target: "HSR", datapoints: hsr, color: 'red', confidence: 100 }
{
target: "HSR",
datapoints: hsr.map(([t, v, [l, u]]) => [t, v]),
color: 'red'
},
{
target: "HSR_Upper_bound",
datapoints: hsr.map(([t, v, [u, l]]) => [t, u]),
color: 'red'
},
{
target: "HSR_Lower_bound",
datapoints: hsr.map(([t, v, [u, l]]) => [t, l]),
color: 'red'
}
],
segments: segments,
}

2
client/src/components/pods/hastic_pod.ts

@ -16,7 +16,7 @@ export abstract class HasticPod<T> extends LinePod {
protected segmentSet: SegmentsSet<Segment>
) {
super(el, undefined, {
renderLegend: false,
renderLegend: true,
zoomEvents: {
mouse: {
zoom: {

6
client/src/services/analytics.service.ts

@ -57,7 +57,7 @@ export function getStatusGenerator(): AsyncIterableIterator<string> {
return getGenerator<string>(100, getStatus);
}
export async function getHSR(from: number, to: number): Promise<[number, number][]> {
export async function getHSRAnomaly(from: number, to: number): Promise<[number, number, [number, number]][]> {
if(from >= to) {
throw new Error("`from` can`t be less than `to`");
}
@ -65,8 +65,8 @@ export async function getHSR(from: number, to: number): Promise<[number, number]
const uri = ANALYTICS_API_URL + `hsr/?from=${from}&to=${to}`;
const res = await axios.get(uri);
const values = res["data"]["TimeSerie"];
const values = res["data"]["ConfidenceTimeSerie"];
console.log(values);
return values as [number, number][];
return values as [number, number, [number, number]][];
}

2
client/src/views/Home.vue

@ -35,7 +35,7 @@
<div v-if="analyticUnitType == analyticUnitTypes[2]">
Alpha:
<input :value="analyticUnitConfig.alpha" @change="alphaChange" /> <br/>
Confidence:
Confidence:
<input :value="analyticUnitConfig.confidence" @change="confidenceChange" /> <br/><br/>
</div>
</div>

6
server/src/services/analytic_service/analytic_unit/anomaly_analytic_unit.rs

@ -77,14 +77,14 @@ impl AnalyticUnit for AnomalyAnalyticUnit {
}
let mut sts = Vec::new();
sts.push(ts[0]);
sts.push((ts[0].0, ts[0].1, ((ts[0].1 + self.config.confidence, ts[0].1 - self.config.confidence))));
for t in 1..ts.len() {
let alpha = self.config.alpha;
let stv = alpha * ts[t].1 + (1.0 - alpha) * sts[t - 1].1;
sts.push((ts[t].0, stv));
sts.push((ts[t].0, stv, (stv + self.config.confidence, stv - self.config.confidence)));
}
Ok(HSR::TimeSerie(sts))
Ok(HSR::ConfidenceTimeSerie(sts))
}
}

3
server/src/services/analytic_service/types.rs

@ -66,7 +66,8 @@ pub struct DetectionTask {
// varies for different analytic units
#[derive(Debug, Serialize)]
pub enum HSR {
TimeSerie(Vec<(u64, f64)>)
TimeSerie(Vec<(u64, f64)>),
ConfidenceTimeSerie(Vec<(u64, f64, (f64, f64))>)
}
#[derive(Debug)]

Loading…
Cancel
Save