Prometheus.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import React, { createContext, useContext, useEffect, useState } from 'react';
  2. import { PrometheusContextType } from './Types';
  3. import { authContext } from '../context/Auth';
  4. import {
  5. LAST_TIME_WITH_PROMETHEUS,
  6. LAST_TIME_PROMETHEUS_ADDRESS,
  7. LAST_TIME_PROMETHEUS_INSTANCE,
  8. LAST_TIME_PROMETHEUS_NAMESPACE,
  9. } from '../consts/Localstorage';
  10. import { formatPrometheusAddress } from '../utils/Format';
  11. import { PrometheusHttp } from '../http/Prometheus';
  12. import {
  13. PROMETHEUS_ADDRESS,
  14. PROMETHEUS_INSTANCE_NAME,
  15. PROMETHEUS_NAMESPACE,
  16. WITH_PROMETHEUS,
  17. } from '../consts/Prometheus';
  18. export const prometheusContext = createContext<PrometheusContextType>({
  19. withPrometheus: false,
  20. setWithPrometheus: () => {},
  21. isPrometheusReady: false,
  22. prometheusAddress: '',
  23. prometheusInstance: '',
  24. prometheusNamespace: '',
  25. setPrometheusAddress: () => {},
  26. setPrometheusInstance: () => {},
  27. setPrometheusNamespace: () => {},
  28. });
  29. const { Provider } = prometheusContext;
  30. export const PrometheusProvider = (props: { children: React.ReactNode }) => {
  31. const { isAuth } = useContext(authContext);
  32. const [withPrometheus, setWithPrometheus] = useState(
  33. !!(
  34. window.localStorage.getItem(LAST_TIME_WITH_PROMETHEUS) || WITH_PROMETHEUS
  35. )
  36. );
  37. const [prometheusAddress, setPrometheusAddress] = useState(
  38. window.localStorage.getItem(LAST_TIME_PROMETHEUS_ADDRESS) ||
  39. PROMETHEUS_ADDRESS
  40. );
  41. const [prometheusInstance, setPrometheusInstance] = useState(
  42. window.localStorage.getItem(LAST_TIME_PROMETHEUS_INSTANCE) ||
  43. PROMETHEUS_INSTANCE_NAME
  44. );
  45. const [prometheusNamespace, setPrometheusNamespace] = useState(
  46. window.localStorage.getItem(LAST_TIME_PROMETHEUS_NAMESPACE) ||
  47. PROMETHEUS_NAMESPACE
  48. );
  49. const [isPrometheusReady, setIsPrometheusReady] = useState(false);
  50. useEffect(() => {
  51. if (!isAuth) return;
  52. if (withPrometheus) {
  53. const prometheusAddressformat =
  54. formatPrometheusAddress(prometheusAddress);
  55. PrometheusHttp.setPrometheus({
  56. prometheusAddress: prometheusAddressformat,
  57. prometheusInstance,
  58. prometheusNamespace,
  59. }).then(({ isReady }: { isReady: boolean }) => {
  60. console.log('prometheus is ready?', isReady);
  61. if (isReady) {
  62. window.localStorage.setItem(LAST_TIME_WITH_PROMETHEUS, 'true');
  63. window.localStorage.setItem(
  64. LAST_TIME_PROMETHEUS_ADDRESS,
  65. prometheusAddress
  66. );
  67. window.localStorage.setItem(
  68. LAST_TIME_PROMETHEUS_INSTANCE,
  69. prometheusInstance
  70. );
  71. window.localStorage.setItem(
  72. LAST_TIME_PROMETHEUS_NAMESPACE,
  73. prometheusNamespace
  74. );
  75. }
  76. setIsPrometheusReady(isReady);
  77. });
  78. } else {
  79. setIsPrometheusReady(false);
  80. }
  81. }, [isAuth, setIsPrometheusReady]);
  82. return (
  83. <Provider
  84. value={{
  85. withPrometheus,
  86. setWithPrometheus,
  87. isPrometheusReady,
  88. prometheusAddress,
  89. prometheusInstance,
  90. prometheusNamespace,
  91. setPrometheusAddress,
  92. setPrometheusInstance,
  93. setPrometheusNamespace,
  94. }}
  95. >
  96. {props.children}
  97. </Provider>
  98. );
  99. };