useSimplePollHealth.js 773 B

12345678910111213141516171819202122232425262728293031323334
  1. import { useState, useEffect, useCallback } from "react";
  2. import { UNKNOWN, OK, BAD, FAILED } from "../components/shared/StatusMessage";
  3. export default ({
  4. url,
  5. ms = 20000,
  6. fetchOptions = {},
  7. }) => {
  8. const [status, setStatus] = useState(UNKNOWN);
  9. const checkServer = useCallback(async () => {
  10. console.log(`Polling ${url}`);
  11. try {
  12. const res = await fetch(url, fetchOptions);
  13. if (res.ok) {
  14. setStatus(OK);
  15. } else {
  16. setStatus(BAD);
  17. }
  18. } catch (err) {
  19. console.log(err);
  20. setStatus(FAILED);
  21. }
  22. }, [url, fetchOptions]);
  23. useEffect(() => {
  24. checkServer();
  25. const interval = setInterval(checkServer, ms);
  26. return () => clearInterval(interval);
  27. }, [ms, checkServer]);
  28. return status;
  29. }