A Control System for Distributed Applications
Supvisors is a Control System for Distributed Applications, based on multiple instances of Supervisor running over multiple nodes.
The main features are:
- a new web-based dashboard that replaces the default dashboard of Supervisor,
- an extended XML-RPC API to control applications and multiple Supervisor instances,
- the definition of a rules file to handle:
- the starting sequence of the applications,
- the stopping sequence of the applications,
- the starting strategy of the processes,
- the strategy to apply when a process crashes.
Supvisors proposes a contribution to the following Supervisor issues:
- #122 - supervisord Starts All Processes at the Same Time
- #177 - Dynamic numproc change
- #456 - Add the ability to set different "restart policies" on process workers
- #520 - allow a program to wait for another to stop before being stopped?
- #723 - Restart waits for all processes to stop before starting any
- #763 - unexpected exit not easy to read in status or getProcessInfo
- #874 - Bring down one process when other process gets killed in a group
- #1023 - Pass arguments to program when starting a job?
- #1150 - Why do event listeners not report the process exit status when stopped/crashed?
Supvisors has been tested and is known to run on Linux (CentOS 8.3). It will likely work fine on most UNIX systems.
Supvisors will not run at all under any version of Windows.
Supvisors >= 0.2 works with Python 3.6 or later.
Supvisors 0.1 (available on PyPi) works with Python 2.7 (and former versions of Supervisor, i.e. 3.3.0) but is not maintained anymore.
Supvisors has dependencies on:
|-----------------------------------------------|---------|----------| | Package | Release | Optional | |-----------------------------------------------|---------|----------| | Supervisor | 4.2.4 | | | PyZMQ | 20.0.0 | | | psutil | 5.7.3 | X | | matplotlib | 3.3.3 | X | | lxml | 4.6.2 | X | |-----------------------------------------------|---------|----------|
Please note that some of these dependencies may have their own dependencies.
Versions are given for information. Although Supvisors has been developed and tested with these releases, the minimal release of each dependency is unknown. Other releases are likely working as well.
Supvisors can be installed with
# minimal install (including Supervisor and PyZMQ) [bash] > pip install supvisors # extra install for all optional dependencies [bash] > pip install supvisors[all]
You can view the current Supvisors documentation here.
You will find detailed installation and configuration documentation.
Reporting Bugs and Viewing the Source Repository
Please report bugs in the Github issue tracker.
You can view the source repository for Supvisors.
Not opened yet.
Fixed Issue #99. Update the Supvisors design so that it can be used to supervise multiple Supervisor instances on multiple nodes. This update had a major impact on the source code. More particularly:
- The XML-RPCs
get_all_instances_infohave been added to replace
instance_statushas been added to replace
- The XML-RPCs that would return attributes
addressesare now returning
identifiersrespectively. This impacts the following XML-RPCs (and related
supvisors_listoption has been added to replace
address_listin the Supvisors section of the Supervisor configuration file. This option accepts a more complex definition:
<identifier>host_name:http_port:internal_port. Note that the simple
host_nameis still supported in the event where Supvisors doesn't have to deal with multiple Supervisor instances on the same node.
core_identifiersoption has been added to replace
force_synchro_ifin the Supvisors section of the Supervisor configuration file. It targets the names deduced from the
identifiersoption has been added to replace the
addressesoption in the Supvisors rules file. This option targets the names deduced from the
address-like attributes, XML-RPCs and options are deprecated and will be removed in the next version.
- The XML-RPCs
Fixed Issue #98. Move the heartbeat emission to the Supvisors thread to avoid being impacted by a Supervisor momentary freeze. On the heartbeat reception part, consider that the node is
SILENTbased on a number of ticks instead of time.
Fix issue with
supvisors.stop_processXML-RPC that wouldn't stop all processes when any of the targeted processes is already stopped.
Fix exception when authorization is received from a node that is not in
Fix regression (missing disconnect) on node isolation when fencing is activated.
Fix issue in statistics compiler when network interfaces are dynamically created / removed.
rpcrequestshas been removed because useless. The function
getRPCInterfaceof th module
supervisor.childutilsdoes the job.
stopwaitsecsprogram options have been added to the results of
rules_fileis updated to
rules_filesand supports multiple files for Supvisors rules. The option
rules_fileis thus deprecated and will be removed in the next version.
Add a new
restart_sequenceXML-RPC to trigger a full application start sequence.
restart_processXML-RPC so that processes can restart themselves using them.
expected_exitto the output of
supervisorctl sstatuswhen the process is
Add the new option
stats_enabledto enable/disable the statistics function.
supervisorctlso that calls are made on each individually process rather than process group when
allis used as parameter.
Add exit codes to erroneous Supvisors calls in
When aborting jobs when re-entering the
INITIALIZATIONstate, clear the structure holding the jobs in progress. It has been found to stick Supvisors in the
DEPLOYMENTstate in the event where the Master node is temporarily
Restrict the use of the XML-RPCs
restart_applicationto Managed applications only.
Review the logic of the refresh button in the Web UI.
Add node time to the node boxes in the Main page of the Web UI.
Sort alphabetically the entries of the application menu of the Web UI.
Update the mouse pointer look on nodes in the Main and Host pages of the Web UI.
Remove the useless timecode in the header of the Process and Host pages of the Web UI as it is now provided at the bottom right of all pages.
Add class "action" to Web UI buttons that trigger an XML-RPC.
Switch from Travis-CI to GitHub Actions for continuous integration.
Implement Supervisor Issue #177. It is possible to update dynamically the program numprocs using the new
Add targets Python 3.7 and Python 3.8 to Travis-CI.
Enable the hash '#' for the
addressesof a non-distributed application.
supvisorsctlto pally the lack of support of
supervisorctlwhen used with
--serverurl URLoption. See related Supervisor Issue #1455.
breed.pyas a binary of Supvisors:
supvisors_breed. The script only considers group duplication as it is fully valid to include multiple times a program definition in several groups.
Move the contents of the
[supvisors]section into the
[rpcinterface:supvisors]section and benefit from the configuration structure provided by Supervisor. The
[supvisors]section itself is thus obsolete.
Remove deprecated support of
Fixed issue when using the Web UI Application page from a previous launch.
Invert the stop sequence logic, starting from the greatest
stop_sequencenumber to the lowest one.
stop_sequenceis not set in the rules files, it is defaulted to the
start_sequencevalue. With the new stop sequence logic, the stop sequence is by default exactly the opposite of the start sequence.
Fixed Nodes' column width for
'Scenario 3' has been added to the Supvisors use cases.
A 'Gathering' configuration has been added to the Supvisors use cases. It combines all uses cases.
Fixed exception in
INITIALIZATIONstate when the Master declared by other nodes is not RUNNING yet and the core nodes are RUNNING.
Fixed exception when program rules and extra arguments are tested against a program unknown to the local Supervisor.
Fixed issue about program patterns that were applicable to all elements. The scope of program patterns is now limited to their owner application.
Fixed issue with infinite tries of application restart when the process cannot be started due to a lack of resources and
RESTART_APPLICATIONis set on the program in the Supvisors rules file.
Fixed issue about application state not updated after a node has become silent.
Fixed issue when choosing a node in
Starter. Apply the requests that have not been satisfied yet for non-distributed applications.
Logic for application major / minor failures reviewed.
Simplify the insertion of applications to start or stop in Commander jobs.
In the rules file, support for application patterns has been added.
In the rules file,
patternelements are deprecated and are replaced by
programelements with a
patternattribute instead of a
nameattribute. Support for
patternelements will be removed in the next version of Supvisors.
Node aliases have been added to the rules file.
Add the current node to all pages of Web UI to be aware of the node that displays the page.
The Web UI is updated to handle a large list of applications, nodes, processor cores and network interfaces.
In the Process page of the Web UI, expand / shrink actions are not applicable to programs that are not owned by a Supervisor group.
In the application navigation menu of the Web UI, add a red light near the Applications title if any application has raised a failure.
In the Application page of the Web UI, default starting strategy is the starting strategy defined in the rules file for the application considered.
In the Application ang Process page, the detailed process statistics can be deselected.
Titles added to the output of :program:
The XML schema has been moved to a separate file
Remove dependency to netifaces as psutil provides the function.
'Scenario 2' has been added to the Supvisors use cases.
breed.pyhas been added to the installation package. It can be used to duplicate the applications based on a template configuration and more particularly used to prepare the Scenario 2 of the Supvisors use cases.
Fixed Issue #92. The Master drives the state of all Supvisors instances and a simplified state machine has been assigned to non-master Supvisors instances. The loss of the Master instance is managed in all relevant states.
Fixed issue about applications that would be started automatically whereas their
start_sequenceis 0. The regression has been introduced during the implementation of applications repair in Supvisors 0.6.
Enable stop sequence on Unmanaged applications.
In the application navigation menu of the Web UI, add a red light to applications having raised a failure.
New application rules
addressesadded to the Supvisors rules file. Non-distributed applications have all their processes started on the same node chosen in accordance with the
Starting strategy added to the application rules.
Fixed issue when choosing a node in
Starter. The starting strategies considers the current load of the nodes and includes the requests that have not been satisfied yet.
Fixed issue with infinite process restart when the process crashes and
RESTART_PROCESSis set on the program in the Supvisors rules file. When the process crashes, only the Supervisor
autorestartapplies. The Supvisors
RESTART_PROCESSapplies only when the node becomes inactive.
Fixed exception when forcing the state on a process that is unknown to the local Supervisor.
RESTART_APPLICATIONif the application is stopped.
For the Master election, give a priority to nodes declared in the
forced_synchro_ifoption if used.
When using the
forced_synchro_ifoption and when
auto_fenceis activated, do not isolate nodes as long as
synchro_timeouthas not passed.
INITALIZATIONstate, skip the synchronization phase upon notification of a known Master and adopt it.
Add reciprocity to isolation even if
auto_fenceis not activated.
In the process description of the Web UI Application page, add information about the node name. In particular, it is useful to know where the process was running when it is stopped.
Start adding use cases to documentation, inspired by real examples. 'Scenario 1' has been added.
Applications that are not declared in the rules file are not managed. Unmanaged applications have no start/stop sequence, no state and status (always STOPPED) and Supvisors does not raise a conflict if multiple instances are running over multiple nodes.
Improve Supvisors stability when dealing with remote programs undefined locally.
Add expand / shrink actions to applications to the
ProcInstanceViewof the Web UI.
Upon authorization of a new node in Supvisors, back to
DEPLOYMENTstate to repair applications.
change_log_levelto dynamically change the Supvisors logger level.
Application state is evaluated only against the starting sequence of its processes.
Fixed blocking issue when Master is stopped while in
Fixed issue with applications that would not fully stop when using the
STOP_APPLICATIONstarting failure strategy.
Fixed issue related to Issue #85. An exception was raised when the program
procnumwas greater than the list of applicable nodes.
Fixed Issue #91. Fix CSS style on the process tables in HTML.
Fixed Issue #90. The Supvisors Master node drives the transition to
In the Web UI, set the process state color to
FATALwhen the process has exited unexpectedly.
Change the default expected loading to
0in the program rules.
Enumused for enumerations (not available in Python 2.7).
supvisors_shortcutsfrom source code to get rid of IDE warnings.
All unit tests updated from
Include this Change Log to documentation.
force_synchro_ifto force the end of the synchronization phase when a subset of nodes is active.
New starting strategy
LOCALadded to command the starting of an application on the local node only.
Fixed Issue #87. Under particular circumstances, Supvisors could have multiple Master nodes.
Fixed Issue #86. The starting and stopping sequences may fail and block when a sub-sequence includes only failed programs.
Fixed Issue #85. When using
address_listprogram rule of the Supvisors rules file, a subset of nodes can optionally be defined.
Fixed Issue #84. In the Supvisors rules file, program rules can be defined using both model reference and attributes.
The Web UI uses the default starting strategy of the configuration file.
The layout of Web UI statistics sections has been rearranged.
Fixed CSS style missing for
CHECKINGnode state in tables.
Star added to the node box of the Master instance on the main page.
Type annotations are added progressively in source code.
Start switching from
trace) updated to remove printed objects.
Auto-refresh button added to all pages.
Web UI Main page reworked by adding a subdivision of application in node boxes.
Fixed exception when exiting using
Fixed exception when rules files is not provided.
Fixed Issue #81. When Supvisors logfile is set to
AUTO, Supvisors uses the same logger as Supervisor.
Fixed Issue #79. When
UNKNOWNProcess state is forced by Supvisors,
spawnerrwas missing in the listener payload.
designfolder moved to a dedicated GitHub repository.
100% coverage reached in unit tests.
Migration to Python 3.6. Versions of dependencies are refreshed, more particularly Supervisor 4.2.1.
CSS of Web UI updated / simplified.
New action added to Host Process page of WebUI:
tail -f stderrbutton.
New information actions added to Application page of WebUI:
tail -f stdout,
tail -f stderrbuttons.
Fixed Issue #75. Supvisors takes into account the
Fixed Issue #17. The user selections on the web UI are passed to the URL.
Fixed Issue #72. The extra arguments are shared between all Supvisors instances.
Coverage improved in tests.
Docs target added to Travis-CI.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size supvisors-0.11.tar.gz (364.8 kB)||File type Source||Python version None||Upload date||Hashes View|
|Filename, size supvisors-0.11-py3-none-any.whl (418.3 kB)||File type Wheel||Python version py3||Upload date||Hashes View|