index.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { Gauge } from '@ant-design/charts';
  2. import useSendWebsocketMessage from '@/hooks/websocket/useSendWebsocketMessage';
  3. import WebsocketTopic from '@/utils/topic';
  4. import { useEffect, useState } from 'react';
  5. import type { WebsocketPayload } from '@/hooks/websocket/typings';
  6. const CPU = () => {
  7. const [subscribeTopic] = useSendWebsocketMessage();
  8. const [value, setValue] = useState<number>(0);
  9. useEffect(() => {
  10. const cpuRealTime = subscribeTopic?.(
  11. WebsocketTopic.CPURealTime.id,
  12. WebsocketTopic.CPURealTime.topic,
  13. { params: { history: 1 } },
  14. )?.subscribe((data: WebsocketPayload) => {
  15. // +0.01为了解决0.00图表异常
  16. setValue(((data.payload.value as number) + 0.01) / 100);
  17. });
  18. return () => cpuRealTime?.unsubscribe();
  19. }, []);
  20. const config = {
  21. width: 200,
  22. height: 200,
  23. range: {
  24. ticks: [0, 1 / 3, 2 / 3, 1],
  25. color: ['#F4664A', '#FAAD14', '#30BF78'],
  26. },
  27. indicator: {
  28. pointer: { style: { stroke: '#D0D0D0' } },
  29. pin: { style: { stroke: '#D0D0D0' } },
  30. },
  31. statistic: {
  32. content: {
  33. style: {
  34. fontSize: '36px',
  35. lineHeight: '36px',
  36. },
  37. },
  38. },
  39. };
  40. return <Gauge {...config} percent={value} />;
  41. };
  42. export default CPU;