All files / kernel-ui/src/hooks useKernelActions.ts

100% Statements 22/22
100% Branches 0/0
100% Functions 16/16
100% Lines 22/22

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97                                  14x         14x 2x       1x 1x           14x 2x       1x   1x             14x 2x       1x   1x             14x 2x       1x 1x           14x   2x       1x   1x           14x                
import type { ClusterConfig } from '@metamask/ocap-kernel';
import { useCallback } from 'react';
 
import { usePanelContext } from '../context/PanelContext.tsx';
 
/**
 * Hook for handling kernel actions.
 *
 * @returns Kernel actions.
 */
export function useKernelActions(): {
  terminateAllVats: () => void;
  collectGarbage: () => void;
  clearState: () => void;
  reload: () => void;
  launchSubcluster: (config: ClusterConfig) => void;
} {
  const { callKernelMethod, logMessage } = usePanelContext();
 
  /**
   * Terminates all vats.
   */
  const terminateAllVats = useCallback(() => {
    callKernelMethod({
      method: 'terminateAllVats',
      params: [],
    })
      .then(() => logMessage('All vats terminated', 'success'))
      .catch(() => logMessage('Failed to terminate all vats', 'error'));
  }, [callKernelMethod, logMessage]);
 
  /**
   * Collects garbage.
   */
  const collectGarbage = useCallback(() => {
    callKernelMethod({
      method: 'collectGarbage',
      params: [],
    })
      .then(() => logMessage('Garbage collected', 'success'))
      .catch((problem) =>
        logMessage(`Failed to collect garbage ${problem}`, 'error'),
      );
  }, [callKernelMethod, logMessage]);
 
  /**
   * Clears the kernel state.
   */
  const clearState = useCallback(() => {
    callKernelMethod({
      method: 'clearState',
      params: [],
    })
      .then(() => logMessage('State cleared', 'success'))
      .catch((error: Error) =>
        logMessage(`Failed to clear state: ${error.message}`, 'error'),
      );
  }, [callKernelMethod, logMessage]);
 
  /**
   * Reloads the kernel
   */
  const reload = useCallback(() => {
    callKernelMethod({
      method: 'reload',
      params: [],
    })
      .then(() => logMessage('Kernel reloaded', 'success'))
      .catch(() => logMessage('Failed to reload', 'error'));
  }, [callKernelMethod, logMessage]);
 
  /**
   * Launches a subcluster.
   */
  const launchSubcluster = useCallback(
    (config: ClusterConfig) => {
      callKernelMethod({
        method: 'launchSubcluster',
        params: { config },
      })
        .then(() => logMessage('Subcluster launched', 'success'))
        .catch((error) =>
          logMessage(`Failed to launch subcluster: ${error.message}`, 'error'),
        );
    },
    [callKernelMethod, logMessage],
  );
 
  return {
    terminateAllVats,
    collectGarbage,
    clearState,
    reload,
    launchSubcluster,
  };
}