ChartDonutDisk.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { Component } from "react";
  2. import ContentWrapper from "@/components/Layout/ContentWrapper";
  3. import { Container, Row, Col, Card, CardHeader, CardBody } from "reactstrap";
  4. import Sparkline from "@/components/Common/Sparklines.js";
  5. import MorrisChart from "@/components/Charts/Morris.js";
  6. import { getDiskSpace } from "../../actions/disk";
  7. import moment from "moment";
  8. class ChartDonutDisk extends Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. use_disk: undefined,
  13. free_disk: undefined,
  14. loading: true,
  15. };
  16. }
  17. componentDidMount = async () => {
  18. const { token } = this.props;
  19. try {
  20. const dataDisk = await getDiskSpace(token);
  21. const use_disk = parseFloat(`${dataDisk?.data?.map(e => e.use_percent)}`.replace('%', ''));
  22. const free_disk = parseFloat(100 - use_disk);
  23. this.setState({ use_disk, free_disk, loading: false });
  24. } catch (error) {
  25. console.error("Error fetching disk space data: ", error);
  26. this.setState({ loading: false });
  27. }
  28. };
  29. ChartDonut = {
  30. options: {
  31. element: 'morris-donut',
  32. colors: ['#3e3a8e', '#fad732'],
  33. resize: true,
  34. formatter: function (value, data) {
  35. return value + '%';
  36. }
  37. },
  38. };
  39. render() {
  40. const { use_disk, free_disk, loading } = this.state;
  41. if (loading) {
  42. return <div>Loading...</div>;
  43. }
  44. const chartData = [
  45. {
  46. label: "Terpakai",
  47. color: "#3e3a8e",
  48. value: use_disk
  49. },
  50. {
  51. label: "Tidak Terpakai",
  52. color: "#b0adfe",
  53. value: free_disk
  54. }
  55. ];
  56. return (
  57. <Col lg={12}>
  58. <Card className="card-default">
  59. <CardBody>
  60. <MorrisChart type={'Donut'} id="morris-donut" options={this.ChartDonut.options} data={chartData} className="flot-chart" />
  61. </CardBody>
  62. <div align="center" className=" mb-2">
  63. <span>Data Statistik Kapasitas Hardisk Per {moment().locale("id").format("DD MMMM YYYY")}</span>
  64. </div>
  65. </Card>
  66. </Col>
  67. );
  68. }
  69. }
  70. export default ChartDonutDisk;