Advertisement
yurystanev

task FSM

Dec 19th, 2019
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const {
  2.   send,
  3. } = require('xstate');
  4. const debug = require('debug')('TASK_STATE_MACHINE.JS');
  5.  
  6. const runTaskStates = {
  7.   id: 'runTaskFSM',
  8.   initial: 'pullPackage',
  9.   states: {
  10.     pullPackage: {
  11.       entry: ['reportMachineStart', 'pullPackage'],
  12.       on: {
  13.         MAKE_IO_DIR: {
  14.           target: 'mkIODir',
  15.         },
  16.       },
  17.     },
  18.  
  19.     mkIODir: {
  20.       entry: ['mkIODir'],
  21.       on: {
  22.         WRITE_TASK_JSON: {
  23.           target: 'writeTaskDataJSON',
  24.         },
  25.       },
  26.     },
  27.  
  28.     writeTaskDataJSON: {
  29.       entry: ['writeTaskDataJSON'],
  30.       on: {
  31.         DOWNLOAD_INPUTS: {
  32.           target: 'downloadInputs',
  33.         },
  34.       },
  35.     },
  36.  
  37.     downloadInputs: {
  38.       entry: ['downloadInputs'],
  39.       on: {
  40.         LINK_INPUTS: {
  41.           target: 'linkInputs',
  42.         },
  43.       },
  44.     },
  45.  
  46.     linkInputs: {
  47.       entry: ['linkInputs'],
  48.       on: {
  49.         DOWNLOAD_RESOURCES: {
  50.           target: 'downloadResources',
  51.         },
  52.       },
  53.     },
  54.  
  55.     downloadResources: {
  56.       entry: ['downloadResources'],
  57.       on: {
  58.         TASKDIR_PERMISSIONS: {
  59.           target: 'chmodTaskDir',
  60.         },
  61.       },
  62.     },
  63.  
  64.     chmodTaskDir: {
  65.       entry: ['chmodTaskDir'],
  66.       on: {
  67.         JOB_TIMEOUT: {
  68.           target: 'jobTimeout',
  69.         },
  70.       },
  71.     },
  72.  
  73.     jobTimeout: {
  74.       entry: ['jobTimeout'],
  75.       on: {
  76.         INIT_HANDLER: {
  77.           target: 'initHandler',
  78.         },
  79.       },
  80.     },
  81.  
  82.     initHandler: {
  83.       entry: ['initHandler'],
  84.       on: {
  85.         START_JOB: {
  86.           target: 'startJob',
  87.         },
  88.       },
  89.     },
  90.  
  91.     startJob: {
  92.       entry: ['reportUserStart', 'taskRunning', 'startJob'],
  93.       on: {
  94.         TASK_RUNNING: {
  95.           target: 'taskRunning',
  96.         },
  97.       },
  98.     },
  99.  
  100.     taskRunning: {
  101.       entry: [send('RUNNING')],
  102.     },
  103.   },
  104. };
  105.  
  106. module.exports = {
  107.   id: 'runner',
  108.   initial: 'setup',
  109.   strict: true,
  110.   states: {
  111.     setup: {
  112.       entry: [() => {
  113.         debug('State -> setup');
  114.       }],
  115.       on: {
  116.         ERROR: {
  117.           target: 'error',
  118.         },
  119.  
  120.         TERMINATED: {
  121.           target: 'terminated',
  122.         },
  123.  
  124.         RUNNING: {
  125.           target: 'running',
  126.         },
  127.  
  128.         HANDLER_EXIT: {
  129.           target: 'handleExit',
  130.         },
  131.       },
  132.  
  133.       ...runTaskStates,
  134.     },
  135.  
  136.     running: {
  137.       entry: [() => {
  138.         debug('State -> running');
  139.       }],
  140.       on: {
  141.         HANDLER_EXIT: {
  142.           target: 'handleExit',
  143.         },
  144.  
  145.         ERROR: {
  146.           target: 'error',
  147.         },
  148.  
  149.         TERMINATED: {
  150.           target: 'terminated',
  151.         },
  152.       },
  153.     },
  154.  
  155.     handleExit: {
  156.       entry: [() => debug('State -> handleExit'), 'reportUserStop', 'taskHandleExit'],
  157.       on: {
  158.         COMPLETE: {
  159.           target: 'complete',
  160.         },
  161.  
  162.         ERROR: {
  163.           target: 'error',
  164.         },
  165.       },
  166.     },
  167.  
  168.     complete: {
  169.       entry: [() => debug('State -> complete'), 'taskComplete'],
  170.       on: {
  171.         DESTROY: {
  172.           target: 'destroy',
  173.         },
  174.       },
  175.     },
  176.  
  177.     error: {
  178.       entry: ['taskError'],
  179.       on: {
  180.         DESTROY: {
  181.           target: 'destroy',
  182.         },
  183.       },
  184.     },
  185.  
  186.     terminated: {
  187.       entry: ['reportUserStop', 'terminate'],
  188.       on: {
  189.         DESTROY: {
  190.           target: 'destroy',
  191.         },
  192.       },
  193.     },
  194.  
  195.     destroy: {
  196.       entry: ['reportMachineStop', 'destroyTask'],
  197.       type: 'final',
  198.     },
  199.   },
  200. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement