Browse Source

render segments #5

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
2044c1a5c0
  1. 20
      client/src/components/Graph.vue
  2. 29
      client/src/components/hastic_pod/index.ts
  3. 6
      client/src/services/segments.ts

20
client/src/components/Graph.vue

@ -6,7 +6,7 @@
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import { HasticPod, TimeRange } from "./hastic_pod"; import { HasticPod, TimeRange } from "./hastic_pod";
import { getMetrics } from '../services/metrics.service'; import { getMetrics } from '../services/metrics.service';
import { postSegment } from '../services/segments'; import { getSegments, postSegment } from '../services/segments';
import { LineTimeSerie } from "@chartwerk/line-pod"; import { LineTimeSerie } from "@chartwerk/line-pod";
import { SegmentArray } from '@/types/segment_array'; import { SegmentArray } from '@/types/segment_array';
@ -15,21 +15,27 @@ import { Segment, SegmentId } from '@/types/segment';
import _ from "lodash"; import _ from "lodash";
// TODO: move to store // TODO: move to store
async function resolveData(range: TimeRange): Promise<LineTimeSerie[]> { async function resolveData(range: TimeRange): Promise<{
// TODO: return segments from the promise too timeserie: LineTimeSerie[],
segments: Segment[]
}> {
const endTime = Math.floor(range.to); const endTime = Math.floor(range.to);
const startTime = Math.floor(range.from); const startTime = Math.floor(range.from);
const step = Math.max(Math.round((endTime - startTime) / 5000), 1); const step = Math.max(Math.round((endTime - startTime) / 5000), 1);
try { try {
// TODO: request in parallel
let [target, values] = await getMetrics(startTime, endTime, step); let [target, values] = await getMetrics(startTime, endTime, step);
return [ let segments = await getSegments(startTime, endTime);
{ target: target, datapoints: values, color: 'green' }, return {
]; timeserie: [{ target: target, datapoints: values, color: 'green' }],
segments: segments
}
} catch (e) { } catch (e) {
this.$notify({ this.$notify({
title: "Error during extracting metric", title: "Error during extracting data",
text: e, text: e,
type: 'error' type: 'error'
}); });

29
client/src/components/hastic_pod/index.ts

@ -5,7 +5,10 @@ import { ANALYTIC_UNIT_COLORS } from "@/types/colors"
import { Segment, SegmentId } from "@/types/segment"; import { Segment, SegmentId } from "@/types/segment";
export type TimeRange = { from: number, to: number }; export type TimeRange = { from: number, to: number };
export type UpdateDataCallback = (range: TimeRange) => Promise<LineTimeSerie[]>; export type UpdateDataCallback = (range: TimeRange) => Promise<{
timeserie: LineTimeSerie[],
segments: Segment[]
}>;
export type UpdateSegmentCallback = (segment: Segment) => Promise<SegmentId>; export type UpdateSegmentCallback = (segment: Segment) => Promise<SegmentId>;
export class HasticPod extends LinePod { export class HasticPod extends LinePod {
@ -51,7 +54,10 @@ export class HasticPod extends LinePod {
const from = to - 5000; // -5000 seconds const from = to - 5000; // -5000 seconds
this._udc({ from, to }) this._udc({ from, to })
.then(ts => { this.updateData(ts); }) .then(resp => {
this.updateData(resp.timeserie);
this.updateSegments(resp.segments);
})
.catch(() => { /* set "error" message */ }) .catch(() => { /* set "error" message */ })
} }
@ -103,11 +109,11 @@ export class HasticPod extends LinePod {
const startTimestamp = this.xScale.invert(extent[0]); const startTimestamp = this.xScale.invert(extent[0]);
const endTimestamp = this.xScale.invert(extent[1]); const endTimestamp = this.xScale.invert(extent[1]);
this.addLabeling(startTimestamp, endTimestamp); this.addSegment(startTimestamp, endTimestamp);
} }
} }
protected async addLabeling(from: number, to: number) { protected async addSegment(from: number, to: number) {
// TODO: implement // TODO: implement
// TODO: persistance of the label // TODO: persistance of the label
const id = this.getNewTempSegmentId(); const id = this.getNewTempSegmentId();
@ -125,7 +131,7 @@ export class HasticPod extends LinePod {
protected renderSegments() { protected renderSegments() {
const segments = this._segmentSet.getSegments(); const segments = this._segmentSet.getSegments();
for (const s in segments) { for (const s in segments) {
console.log(s); this.renderSegment(segments[s]);
} }
} }
@ -149,20 +155,23 @@ export class HasticPod extends LinePod {
console.log('update range'); console.log('update range');
console.log(range); console.log(range);
const ts = await this._udc({ from: range[0][0], to: range[0][1] }); const resp = await this._udc({ from: range[0][0], to: range[0][1] });
const options = { axis: { x: { range: range[0] } } }; const options = { axis: { x: { range: range[0] } } };
this.updateData(ts, options); this.updateData(resp.timeserie, options);
this.updateSegments(resp.segments);
} }
private _zoomOut({x, y}) { private _zoomOut({x, y}) {
console.log(`${x} -- ${y}`); console.log(`${x} -- ${y}`);
} }
private _renderSegments() { protected updateSegments(segments: Segment[]) {
const m = this.metricContainer; this._segmentSet.clear();
console.log(m); this._segmentSet.setSegments(segments);
this.renderSegments();
} }
// TODO: move to "controller" // TODO: move to "controller"
private _tempIdCounted = -1; private _tempIdCounted = -1;
public getNewTempSegmentId(): SegmentId { public getNewTempSegmentId(): SegmentId {

6
client/src/services/segments.ts

@ -6,7 +6,7 @@ import _ from 'lodash';
const SEGMENTS_API_URL = API_URL + "segments/"; const SEGMENTS_API_URL = API_URL + "segments/";
export async function getSegments(from: number, to: number) { export async function getSegments(from: number, to: number): Promise<Segment[]> {
if(from >= to) { if(from >= to) {
throw new Error("`from` can`t be less than `to`"); throw new Error("`from` can`t be less than `to`");
} }
@ -14,9 +14,7 @@ export async function getSegments(from: number, to: number) {
const uri = SEGMENTS_API_URL + `?from=${from}&to=${to}`; const uri = SEGMENTS_API_URL + `?from=${from}&to=${to}`;
const res = await axios.get(uri); const res = await axios.get(uri);
const target = _.keys(res["data"]["data"])[0]; return res["data"] as Segment[];
const values = res["data"]["data"][target];
return [target, values];
} }
export async function postSegment(segment: Segment): Promise<SegmentId> { export async function postSegment(segment: Segment): Promise<SegmentId> {

Loading…
Cancel
Save