import api from 'api' ; import { Dispatch } from 'redux' ; import { GlobalTime } from 'types/actions/globalTime' ; import { toUTCEpoch } from 'utils/timeUtils' ; import { ActionTypes } from './types' ; export interface Tree { name : string ; value : number ; children ? : Tree [ ] ; } export interface RefItem { refType : string ; traceID : string ; spanID : string ; } export interface TraceTagItem { key : string ; value : string ; } export interface ProcessItem { serviceName : string ; tags : TraceTagItem [ ] ; } export interface pushDStree { id : string ; name : string ; value : number ; time : number ; startTime : number ; tags : TraceTagItem [ ] ; children : pushDStree [ ] ; } export interface spanItem { traceID : string ; spanID : string ; operationName : string ; startTime : number ; duration : number ; references : RefItem [ ] ; tags : [ ] ; logs : [ ] ; processID : string ; warnings : [ ] ; children : pushDStree [ ] ; } export interface traceItem { traceID : string ; spans : spanItem [ ] ; processes : { [ id ] : ProcessItem ; } ; warnings : [ ] ; } export interface traceResponse { data : traceItem [ ] ; total : number ; limit : number ; offset : number ; error : [ ] ; } export type span = [ number , string , string , string , string , string , string , string | string [ ] , string | string [ ] , string | string [ ] , pushDStree [ ] ] ; export interface spanList { events : span [ ] ; segmentID : string ; columns : string [ ] ; } export interface traceResponseNew { [ id ] : spanList ; } export interface spansWSameTraceIDResponse { [ id ] : spanList ; } export interface FetchTracesAction { type : ActionTypes . fetchTraces ; payload : traceResponseNew ; } export interface FetchTraceItemAction { type : ActionTypes . fetchTraceItem ; payload : spansWSameTraceIDResponse ; } export const fetchTraces = ( globalTime , filter_params ) => { return async ( dispatch ) : Promise < void > => { if ( globalTime ) { const request_string = '/spans?limit=100&lookback=2d&start=' + toUTCEpoch ( globalTime . minTime ) + '&end=' + toUTCEpoch ( globalTime . maxTime ) + '&' + filter_params ; const response = await api . get < traceResponseNew > ( request_string ) ; dispatch < FetchTracesAction > ( { type : ActionTypes . fetchTraces , payload : response . data , } ) ; } } ; } ; export const fetchTraceItem = ( traceID ) => { return async ( dispatch ) : Promise < void > => { const request_string = '/traces' + '/' + traceID ; const response = await api . get < spansWSameTraceIDResponse > ( request_string ) ; dispatch < FetchTraceItemAction > ( { type : ActionTypes . fetchTraceItem , payload : response . data , } ) ; } ; } ;