diff --git a/packages/jaeger-ui/src/api/jaeger.js b/packages/jaeger-ui/src/api/jaeger.js index 04ab7f4923..4ce0ee7706 100644 --- a/packages/jaeger-ui/src/api/jaeger.js +++ b/packages/jaeger-ui/src/api/jaeger.js @@ -103,6 +103,9 @@ const JaegerAPI = { fetchServiceOperations(serviceName) { return getJSON(`${this.apiRoot}services/${encodeURIComponent(serviceName)}/operations`); }, + transformOTLP(traces) { + return getJSON(`${this.apiRoot}transform`, { method: 'POST', body: JSON.stringify(traces) }); + }, fetchServiceServerOps(service) { return getJSON(`${this.apiRoot}operations`, { query: { diff --git a/packages/jaeger-ui/src/middlewares/index.js b/packages/jaeger-ui/src/middlewares/index.js index 21f8c3eb9a..c93918fc30 100644 --- a/packages/jaeger-ui/src/middlewares/index.js +++ b/packages/jaeger-ui/src/middlewares/index.js @@ -17,7 +17,9 @@ import { change } from 'redux-form'; import { replace } from 'redux-first-history'; import { searchTraces, fetchServiceOperations } from '../actions/jaeger-api'; +import { loadJsonTraces } from '../actions/file-reader-api'; import { getUrl as getSearchUrl } from '../components/SearchTracePage/url'; +import JaegerAPI from '../api/jaeger'; export { default as trackMiddleware } from './track'; @@ -45,4 +47,29 @@ export const historyUpdateMiddleware = store => next => action => { return next(action); }; +export const transformOTLPMiddleware = store => next => action => { + if (action.type === String([`${loadJsonTraces}_FULFILLED`])) { + // Check if action.payload is OTLP and make API call if so + // We are allowed to change the action.payload here + // + if ('resourceSpans' in action.payload) { + JaegerAPI.transformOTLP(action.payload) + .then(result => { + const transformedAction = { + ...action, + payload: result, + }; + return next(transformedAction); + }) + .catch(() => { + return next(action); + }); + } else { + return next(action); + } + } else { + return next(action); + } +}; + export const promise = promiseMiddleware;