blob: 4ff3e6860b402876c4ddee7c3cb4254a83e34b72 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { base } from '../utils/models';
import { exec } from '../services/graphql';
const metricQuery = `
query TopologyMetric($duration: Duration!, $ids: [ID!]!, $idsS: [ID!]!, $idsC: [ID!]!) {
sla: getValues(metric: {
name: "service_sla"
ids: $ids
}, duration: $duration) {
values {
id
value
}
}
cpmS: getValues(metric: {
name: "service_relation_server_cpm"
ids: $idsS
}, duration: $duration) {
values {
id
value
}
}
latencyS: getValues(metric: {
name: "service_relation_client_resp_time"
ids: $idsS
}, duration: $duration) {
values {
id
value
}
}
cpmC: getValues(metric: {
name: "service_relation_client_cpm"
ids: $idsC
}, duration: $duration) {
values {
id
value
}
}
latencyC: getValues(metric: {
name: "service_relation_client_resp_time"
ids: $idsC
}, duration: $duration) {
values {
id
value
}
}
}
`;
export default base({
namespace: 'topology',
state: {
getGlobalTopology: {
nodes: [],
calls: [],
},
metrics: {
sla: {
values: [],
},
cpm: {
values: [],
},
latency: {
values: [],
},
},
},
varState: {
latencyRange: [100, 500],
},
dataQuery: `
query Topology($duration: Duration!) {
getGlobalTopology(duration: $duration) {
nodes {
id
name
type
isReal
}
calls {
id
source
target
callType
detectPoint
}
}
}
`,
effects: {
*fetchMetrics({ payload }, { call, put }) {
const response = yield call(exec, { query: metricQuery, variables: payload.variables });
if (!response.data) {
return;
}
const { sla, cpmS, cpmC, latencyS, latencyC } = response.data;
yield put({
type: 'saveData',
payload: {
metrics: {
sla,
cpm: {
values: cpmS.values.concat(cpmC.values),
},
latency: {
values: latencyS.values.concat(latencyC.values),
},
},
},
});
},
},
reducers: {
filterApplication(preState, { payload: { aa } }) {
const { variables } = preState;
if (aa.length < 1) {
const newVariables = { ...variables };
delete newVariables.appRegExps;
delete newVariables.appFilters;
return {
...preState,
variables: newVariables,
};
}
return {
...preState,
variables: {
...variables,
appFilters: aa,
appRegExps: aa.map((a) => {
try {
return new RegExp(a, 'i');
} catch (e) {
return null;
}
}),
},
};
},
setLatencyStyleRange(preState, { payload: { latencyRange } }) {
const { variables } = preState;
return {
...preState,
variables: {
...variables,
latencyRange,
},
};
},
},
});