Browse Source

basic rendering of detectinos

pull/25/head
Alexey Velikiy 3 years ago
parent
commit
b2e5b30382
  1. 8
      client/src/components/hastic_pod/index.ts
  2. 6
      client/src/services/segments.service.ts
  3. 24
      client/src/types/segment.ts
  4. 1
      server/src/lib.rs
  5. 10
      server/src/services/analytic_service.rs
  6. 8
      server/src/services/segments_service.rs
  7. 6
      server/src/utils.rs

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

@ -3,7 +3,7 @@ import { AxisRange } from "@chartwerk/core/dist/types";
import { BrushOrientation } from "@chartwerk/core";
import { SegmentsSet } from "@/types/segment_set";
import { ANALYTIC_UNIT_COLORS } from "@/types/colors"
import { Segment, SegmentId } from "@/types/segment";
import { Segment, SegmentId, SegmentType } from "@/types/segment";
export type TimeRange = { from: number, to: number };
export type UpdateDataCallback = (range: TimeRange) => Promise<{
@ -50,8 +50,6 @@ export class HasticPod extends LinePod {
}
});
console.log( BrushOrientation.VERTICAL);
this._csc = csc;
this._dsc = dsc;
this._ctrlKeyIsDown = false;
@ -222,6 +220,10 @@ export class HasticPod extends LinePod {
.attr('fill', ANALYTIC_UNIT_COLORS[0])
.attr('opacity', '0.8')
.attr('pointer-events', 'none')
if(segment.segmentType == SegmentType.LABEL) {
r.attr('style', 'stroke:rgb(0,0,0); stroke-width:2')
}
}
private async _updateRange(range: AxisRange[]) {

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

@ -18,10 +18,10 @@ export async function getSegments(from: number, to: number): Promise<Segment[]>
const uriAnalytics = ANALYTICS_API_URL + `?from=${from}&to=${to}`;
const resAnalytics = await axios.get(uriAnalytics);
const result = res["data"] as Segment[];
const resultAnalytics = resAnalytics["data"] as Segment[];
const result = res["data"] as any[];
const resultAnalytics = resAnalytics["data"] as any[];
return result.concat(resultAnalytics);
return result.concat(resultAnalytics).map(Segment.fromObject);
}
export async function postSegment(segment: Segment): Promise<SegmentId> {

24
client/src/types/segment.ts

@ -1,7 +1,12 @@
export type SegmentId = string;
export enum SegmentType {
LABEL = 'Label',
DETECTION = 'Detection'
}
export class Segment {
constructor(private _id: SegmentId | undefined, public from: number, public to: number, segmentType = 1) {
constructor(private _id: SegmentId | undefined, public from: number, public to: number, segmentType = SegmentType.LABEL) {
if(this._id === undefined) {
throw new Error('id is undefined');
}
@ -36,17 +41,26 @@ export class Segment {
}
// TODO: remove this and make original inheritence
_segmentType: number
get segmentType(): number { return this._segmentType; }
set segmentType(value) { this._segmentType = value; }
_segmentType: SegmentType
get segmentType(): SegmentType { return this._segmentType; }
set segmentType(value: SegmentType) { this._segmentType = value; }
toObject() {
return {
id: this.id,
from: this.from,
to: this.to,
segment_type: "Label"
segment_type: 'Label'
}
}
static fromObject(obj: any) {
return new Segment(
obj.id,
obj.from,
obj.to,
obj.segment_type
);
}
}

1
server/src/lib.rs

@ -1,2 +1,3 @@
pub mod config;
pub mod services;
pub mod utils;

10
server/src/services/analytic_service.rs

@ -1,6 +1,6 @@
use crate::config::Config;
use crate::{config::Config, utils::get_random_str};
use super::{metric_service::MetricService, segments_service::{Segment, SegmentType}};
use super::{metric_service::MetricService, segments_service::{ID_LENGTH, Segment, SegmentType}};
use subbeat::metric::Metric;
@ -42,7 +42,8 @@ impl AnalyticService {
} else {
if from.is_some() {
result.push(Segment {
id: None,
// TODO: persist detections together with id
id: Some(get_random_str(ID_LENGTH)),
from: from.unwrap(),
to: *t,
segment_type: SegmentType::Detection,
@ -52,9 +53,10 @@ impl AnalyticService {
}
}
// TODO: don't repeat myself
if from.is_some() {
result.push(Segment {
id: None,
id: Some(get_random_str(ID_LENGTH)),
from: from.unwrap(),
to,
segment_type: SegmentType::Detection,

8
server/src/services/segments_service.rs

@ -4,10 +4,10 @@ use serde::{Deserialize, Serialize};
use std::sync::{Arc, Mutex};
use std::iter::repeat_with;
use crate::utils::get_random_str;
const ID_LENGTH: usize = 20;
pub const ID_LENGTH: usize = 20;
pub type SegmentId = String;
@ -85,9 +85,7 @@ impl SegmentsService {
// returns id of created segment
pub fn insert_segment(&self, segment: &Segment) -> anyhow::Result<Segment> {
let id: SegmentId = repeat_with(fastrand::alphanumeric)
.take(ID_LENGTH)
.collect();
let id: SegmentId = get_random_str(ID_LENGTH);
// merging
let sgms = self.get_segments_intersected(segment.from, segment.to)?;

6
server/src/utils.rs

@ -0,0 +1,6 @@
use std::iter::repeat_with;
pub fn get_random_str(len: usize) -> String {
return repeat_with(fastrand::alphanumeric).take(len)
.collect();
}
Loading…
Cancel
Save