frontend/src/providers/pond/datadogProxyAPI.tsx

107 lines
2.4 KiB
TypeScript

import { AxiosResponse } from "axios";
import { useHTTP } from "../http";
import { pond } from "protobuf-ts/pond";
import { createContext, PropsWithChildren, useContext } from "react";
import { pondURL } from "./pond";
export interface IDataDogProxyAPIContext {
listLogs: (
from: string,
to: string,
sort: string,
limit: number,
level?: string
) => Promise<AxiosResponse<pond.DataDogLogsResponse>>;
listDeviceLogs: (
device: string | number,
from: string,
to: string,
sort: string,
limit: number,
level?: string
) => Promise<AxiosResponse<pond.DataDogLogsResponse>>;
}
export const DataDogProxyAPIContext = createContext<IDataDogProxyAPIContext>(
{} as IDataDogProxyAPIContext
);
interface Props {}
export default function DataDogProvider(props: PropsWithChildren<Props>) {
const { children } = props;
const { get } = useHTTP();
const listLogs = (from: string, to: string, sort: string, limit: number, query?: string) => {
query = query ? query : "";
// if (level && level !== "all") {
// query = query + " @level:" + level;
// }
return get<pond.DataDogLogsResponse>(
pondURL(
"/datadog/logs?query=" +
query +
"&from=" +
from +
"&to=" +
to +
"&sort=" +
sort +
"&limit=" +
limit
)
);
};
const listDeviceLogs = (
device: string | number,
from: string,
to: string,
sort: string,
limit: number,
level?: string
) => {
let query = "@device:" + device;
if (level && level !== "all") {
query = query + " @level:" + level;
}
// console.log(
// "/datadog/logs?query=" +
// query +
// "&from=" +
// from +
// "&to=" +
// to +
// "&sort=" +
// sort +
// "&limit=" +
// limit
// );
return get<pond.DataDogLogsResponse>(
pondURL(
"/datadog/logs?query=" +
query +
"&from=" +
from +
"&to=" +
to +
"&sort=" +
sort +
"&limit=" +
limit
)
);
};
return (
<DataDogProxyAPIContext.Provider
value={{
listLogs,
listDeviceLogs
}}>
{children}
</DataDogProxyAPIContext.Provider>
);
}
export const useDataDogProxyAPI = () => useContext(DataDogProxyAPIContext);