Architecture ************ The Scheduler Entry-Point ========================= The OpenSVC daemon runs the node scheduler every minute, which in turn runs each service schedulers in separate threads. Each task of the node scheduler can be executed directly through the om node command, and each task of the service scheduler can be executed directly through the svcmgr command. Most tasks produce data sent to the collector for site-level aggregation. Node Scheduler Tasks ++++++++++++++++++++ The node scheduler tasks schedules are defined in ``/node.conf``. Each task has its own section supporting the :kw:`schedule` parameter. The section name is visible in :cmd:`om node print schedule` output in the ``config parameter`` column. .. raw:: html
	$ om node print schedule
	Action                  Last Run             Config Parameter           Schedule Definition                                 
	|- auto_reboot          2017-09-30 16:59:19  reboot.schedule            16:00-17:00@1 sat:last,tue-mon:last * %2+1,feb-apr  
	|- auto_rotate_root_pw  -                    rotate_root_pw.schedule    -                                                   
	|- checks               2017-10-01 17:43:29  checks.schedule            ["16:00-21:00@30 *:last", "! * wed", "*@1"]         
	|- collect_stats        2017-10-01 17:42:29  stats_collection.schedule  @10                                                 
	|- compliance_auto      2017-10-01 00:01:22  compliance.schedule        00:00-01:00@61                                      
	|- dequeue_actions      2017-01-30 10:02:01  dequeue_actions.schedule   -                                                   
	|- pushasset            2017-10-01 00:06:22  asset.schedule             00:00-06:00@361 mon-sun                             
	|- pushbrocade          -                    brocade.schedule           -                                                   
	|- pushcentera          -                    centera.schedule           -                                                   
	|- pushdcs              -                    dcs.schedule               -                                                   
	|- pushdisks            2017-10-01 00:03:22  disks.schedule             00:00-06:00@361 mon-sun                             
	|- pushemcvnx           -                    emcvnx.schedule            -                                                   
	|- pusheva              -                    eva.schedule               -                                                   
	|- pushfreenas          -                    freenas.schedule           -                                                   
	|- pushgcedisks         -                    gcedisks.schedule          -                                                   
	|- pushhds              -                    hds.schedule               -                                                   
	|- pushhp3par           -                    hp3par.schedule            -                                                   
	|- pushibmds            -                    ibmds.schedule             -                                                   
	|- pushibmsvc           -                    ibmsvc.schedule            -                                                   
	|- pushnecism           -                    necism.schedule            -                                                   
	|- pushnetapp           -                    netapp.schedule            -                                                   
	|- pushnsr              -                    nsr.schedule               -                                                   
	|- pushpatch            2017-10-01 00:16:01  patches.schedule           00:00-06:00@361 mon-sun                             
	|- pushpkg              2017-10-01 00:12:01  packages.schedule          00:00-06:00@361 mon-sun                             
	|- pushstats            2017-10-01 17:41:29  stats.schedule             ["00:00-23:59@10"]                                  
	|- pushsym              -                    sym.schedule               -                                                   
	|- pushvioserver        -                    vioserver.schedule         -                                                   
	|- pushxtremio          -                    xtremio.schedule           -                                                   
	`- sysreport            2017-10-01 00:25:02  sysreport.schedule         00:00-06:00@361 mon-sun                             
	
Service Scheduler Tasks +++++++++++++++++++++++ A service scheduler tasks schedules are defined in ``/.conf``. The section and parameter names are visible in :cmd:`om print schedule` output in the ``config parameter`` column. .. raw:: html
	$ om testmd print schedule
	Action                  Last Run             Config Parameter          Schedule Definition  
	|- compliance_auto      2017-10-01 00:09:01  DEFAULT.comp_schedule     00:00-06:00@361      
	|- push_config          2017-10-01 00:01:02  DEFAULT.push_schedule     00:00-06:00@361      
	|- push_resinfo         2017-10-01 16:42:29  DEFAULT.resinfo_schedule  @60                  
	|- push_service_status  2017-10-01 17:39:30  DEFAULT.status_schedule   @8                   
	|- resource_monitor     2017-10-01 17:38:02  DEFAULT.monitor_schedule  @2                   
	|- sync_all             2017-10-01 04:00:04  sync#1.schedule           04:00-06:00@121      
	`- sync_all             2017-10-01 04:00:04  sync#i0.schedule          04:00-06:00@121      
	
Here, the ``push_appinfo`` and ``syncall`` tasks are mapped over respectivelly app and sync resources. Hence their number vary depending on the service configuration. The Listener Entry-Point ======================== The listener port is defined in ``/node.conf`` through the :kw:`node.listener` parameter. When the daemon listener receives an empty packet, it executes the :cmd:`om node dequeue actions` command in a new thread. This command fetches from the collector the list of actions to execute, executes them, and send results to the collector. This behaviour is referred as the ``pull`` mode. Alternaltively, the node can be configured to allow direct actions from the collector through :cmd:`ssh` and :cmd:`sudo`. This is the ``push`` mode.