A Control System for Distributed Applications
Project description
Supvisors
Supvisors is a Control System for Distributed Applications, based on multiple instances of Supervisor running over multiple nodes.
Supvisors works as a Supervisor plugin and its main features are:
- a new web-based dashboard that replaces the default dashboard of Supervisor and allows to control all the Supervisor instances declared,
- an extended XML-RPC API to control applications and processes over the multiple Supervisor instances,
- a notification interface to get the events from multiple Supervisor instances on a
websocketor on aPyZmqsocket.
A set of application and program rules can be added to manage:
- 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 or when a node shuts down,
- the strategy to apply when conflicts are detected.
The Supervisor program supervisorctl has been extended to include the additional XML-RPC API.
Also provided in the scope of this project:
- a
JAVAclient with a full implementation of the Supervisor and Supvisors XML-RPC API ; - a
Flask-RESTXapplication that exposes the Supervisor and Supvisors XML-RPC API through a REST API.
Supervisor Enhancements
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?
- #591 - New Feature: disable/enable
- #712 - shutdown supervisord once one of the programs is killed
- #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?
- #1455 - using supervisorctl with -s does not provide access to the extended API
- #1504 - Web interface: Add stop group Action
Supported Platforms
Supvisors has been tested and is known to run on Linux (Rocky 8, RedHat 8, Ubuntu 20 to 24). It will likely work fine on most UNIX systems.
Supvisors will not run at all under any version of Windows.
Supvisors works with Python 3.9 to Python 3.14.
Due to the lack of support of Python 3.6 and Python 3.7 in the Ubuntu releases provided in the Standard
GitHub-hosted runners, Supvisors is now based on the minimal Python release provided in RedHat 9,
i.e., Python 3.9.
Supvisors 0.18.7 is therefore the last version supporting Python 3.6 to Python 3.8.
Dependencies
Supvisors has dependencies on:
| Package | Optional | Minimal release |
|---|---|---|
| Supervisor | 4.2.4 | |
| psutil | X | 5.9.0 |
| matplotlib | X | 3.5.1 |
| lxml | X | 4.8.0 |
| Flask-RESTX | X | 1.2.0 |
| PyZMQ | X | 25.1.1 |
| websockets | X | 11.0.3 |
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.
Installation
Supvisors can be installed with pip install:
# minimal install (including only Supervisor and its dependencies)
[bash] > pip install supvisors
# extra install for all optional dependencies
[bash] > pip install supvisors[all]
Documentation
You can view the current Supvisors documentation on Read the Docs.
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.
Contributing
Not opened yet.
Change Log
0.19.1 (2026-02-01)
-
Fix Issue #134. Reload the Supvisors process configuration after Supervisor is updated.
-
Fix the distribution logic when multiple applications are in the same starting stage, especially when
LESS_LOADEDorMOST_LOADEDstrategies are used. -
Fix
get_network_infowhen used with a Supvisors nickname. -
Consider the case where process events are received and ignored during the Supvisors handshake.
-
In the application rules of a Supvisors rules file, in combination with the use of an application
pattern, allow the use of stereotypes and aliases associated with the hashtag symbol '#' in the applicationidentifiers. -
Set the local Supvisors nickname with the Supervisor identifier when available.
-
Prevent a Supvisors instance to be internally registered more than once at node level.
-
Add the XML-RPC
get_core_identifiersto return the resolved Supvisors core instances. -
Set the lower limit of the option
synchro_timeoutto 0 instead of 15 (Default value remains unchanged). -
Speed-up the entry in SYNCHRONIZATION state.
-
Strengthen robustness against
psutilissues related to certain operating systems. -
Review HTTP error codes returned by the REST API in
supvisorsflask. -
CI target added for Python 3.14.
0.19 (2025-07-21)
-
Python 3.9 becomes the minimal version. Python 3.6 to Python 3.8 are not supported anymore.
-
Fix the statistics compiler, so that it manages the Supvisors instances discovered.
-
Refactoring of the Supvisors internal state machine. The state
INITIALIZATIONhas been renamed asSYNCHRONIZATIONand a new stateELECTIONhas been added to get more stability in the Master election. -
Implement the enhancement requested through the Pull Request #120. Supvisors uses the
ioctlfunctions to get the relevant network data on all network interfaces and matches the local instance on the whole information available. During the handshake, the local network data is shared with the other Supvisors instances using the new XML-RPCget_network_info. -
Take into account the network data in the Supvisors Web UI, so that the same network interface is used when navigating to another node.
-
Constraint the handshake in time, so that late notifications are not considered.
-
Check the strategy consistency in the handshake. If the options
auto_fence,starting_strategy,conciliation_strategyandsupvisors_failure_strategyare not strictly identical, the local and remote Supvisors instances will isolate each other. -
Add a session cookie to the Supvisors Web UI client. All statistics images served by the Supvisors Web UI are renamed to allow multiple auto-refreshed views in the browser tabs.
-
Rework the XML-RPC
restart_sequencelogic, so that it does not require a Supvisors state change. -
Add the XML-RPCs
get_instance_state_modesandget_all_instances_state_modesin support of getting detailed state and modes information from a single Supvisors instance. This information has been removed from the XML-RPCsget_instance_infoandget_all_instances_info. -
Update the
stop_processcommand, so that the XML-RPC request is sent only to running-like processes. -
Update the
get_master_identifierXML-RPC, so that it returns both the identifier and its nickname in a dictionary. Themastercommand is updated accordingly. -
Add a new option
supvisors_failure_strategyto decide what to do when the initial conditions are not met anymore. -
Add a new option
css_filesto allow user CSS in the Supvisors Web UI. -
Remove the Supvisors instance state
UNKNOWN, and renameSILENTasSTOPPED(default value). Supvisors instances areSTOPPEDwhen created. -
Add the process PID to the process statistics event.
-
Add a timestamp to the events of the Supvisors event interface. This timestamp is also added to the XML-RPCs
get_supvisors_state,get_instance_state_modes,get_all_instances_state_modes,get_application_info,get_all_applications_info,get_process_info,get_all_process_info. Thelast_event_timein the Process status event is renamed aslast_event_mtime. -
Update the upper-left hyperlink of the Supvisors instance box in the main Supvisors Web page, so that it leads to the same page, as provided by the other Supvisors instance, instead of leading to the Supervisor page of the other Supvisors instance.
-
Cancel individual subscriptions from the Supervisor events rather than perform a global clear.
-
Consider variable CPU frequency value returned by
psutil. -
Apply the XML-RPC updates on the JAVA client and the Flask interface.
-
CI target added for Python 3.13.
0.18.7 (2025-01-10)
-
Last Supvisors version supporting Python 3.6 to Python 3.8.
-
Fix a random Python crash due to an I/O exception when the Supervisor log file is rolling over.
-
Fix a possible race condition in the Supervisor proxies management.
0.18.6 (2024-08-20)
-
Completion of fix about process CPU statistics when using SOLARIS mode.
-
Add a grid to statistics plots in the Supvisors Web UI.
0.18.5 (2024-08-19)
- Fix process CPU statistics when using SOLARIS mode. Issue introduced in Supvisors 0.18 with statistics refactoring.
0.18.4 (2024-07-13)
-
Fix
supervisorduptime in the Supvisors Web UI. Issue introduced in Supvisors 0.18 with monotonic time consideration. -
Set a default warning message to state that Supvisors rules don't apply on the Supervisor page of the Supvisors Web UI.
-
Emphasize the selected Supervisor instance and Application in the navigation of the Supvisors Web UI.
-
In discovery mode, clarify the logs in the event where the Supvisors nick identifier is not unique.
-
Add a section about multicast in documentation troubleshooting.
0.18.3 (2024-06-05)
-
Recreate the internal proxy to the local Supervisor if older than 20 minutes, in order to palliate the closure of all channels inactive during 30 minutes in the Supervisor HTTP server. This fixes a rare bug that has been introduced in Supvisors 0.17, and whose occurrence has greatly increased after the refactoring of the Supvisors 0.18 internal communications.
-
Swap Memory and Network statistics cards in the Supvisors Web UI.
0.18.2 (2024-05-27)
-
Handle the
PermissionErrorexception when trying to get disk usage. -
Update CSS for overflow parts in the Supvisors Web UI.
0.18.1 (2024-05-26)
-
Fix the different perception of Supvisors instances about a process whose state is forced.
-
Fix regression using the
SINGLE_NODEdistribution rule. -
Share the configuration of
stdoutandstderrlog files between all Supvisors instances.has_stdoutandhas_stderrare added to the result of the XML-RPCget_local_process_info. -
When the
software_nameoption is set, it is used as a prefix in all log traces. -
Add disk usage and read/write statistics to the Supvisors Web UI. Disk statistics are published to the event interface and the JAVA client has been updated accordingly.
-
In the Application page of the Supvisors Web UI, add the possibility to expand the process information from all Supvisors instances where it is configured. In the event of a process conflict, a
Conciliatebutton is displayed instead od a list of Supvisors instances. Clicking on this button displays the Conciliation page. -
Split the Main and Conciliation pages of the Supvisors Web UI.
-
The conflicting processes are highlighted in the Main page of the Supvisors Web UI.
-
Change the access of the Conciliation page of the Supvisors Web UI, by clicking on the
CONCILIATIONstate. A click on the Supvisors logo always brings back the Main page. -
Fix the renaming of
DEPLOYMENTstate asDISTRIBUTIONin the JAVA client.
0.18 (2024-05-02)
-
Refactoring of the Supvisors internal communications. The
internal_portof the Supvisors section in the Supervisor configuration file is no longer needed. As a consequence, thesupvisors_listoption is simplified as follows:<identifier>host_name:http_port. The transitionalSupvisorsInstanceStates.ISOLATINGstate has been removed. The remote Supvisors instance becomesSILENTas soon as the event publication fails due to a transport issue. -
Implement Issue #50. A new tag
operational_statusin the Application rules allows to declare the formula applicable to evaluate the application operational status.status_formulais added to the result of the XML-RPCget_application_rules. -
Implement Issue #15. A
StarterModelhas been added to Supvisors to give a prediction of the application distribution when started. The command is available through the new XML-RPCstest_start_applicationandtest_start_processand have been added tosupervisorctl. -
The Supvisors
core_identifiersoption and the Supvisors rules can now accept indifferently Supervisor identifiers or keys with thehost:http_portformat. -
Update the
get_instance_infoXML-RPC so that the function accepts a stereotype as parameter. As a consequence, it now returns a list of dictionaries. -
Add a
lazyattribute to theupdate_numprocsXML-RPC, so that when set combined to a numprocs decrease, Supvisors defers the obsolete processes deletion from the Supervisor configuration only when the processes stop (exit, crash or later user request) instead of stopping them immediately. -
Add monotonic time in internal model and exchanges to cope with time updates while Supvisors is running. Impact on the XML-RPC
get_instance_info,get_process_infoand on the event interface for instance status and process event. -
Add new
get_statistics_status,enable_host_statistics,enable_process_statistics,update_collecting_periodXML-RPCs to support the possibility to get and update the collection of host and process statistics. The corresponding commandsstats_status,enable_statsandstats_periodhave been added tosupervisorctl. The JAVA client includes the new XML-RPCs. -
Add new
get_all_inner_process_infoandget_inner_process_infoXML-RPCs to support debug investigation. They return internal information on the processes declared on a Supvisors instance. -
Move the host statistics collector to the statistics collector process. The option
stats_collecting_periodis now applicable to host statistics collector. -
Re-apply the eventual process
extra_argswhen restarting the application. -
In the Supervisors navigation menu of the Web UI, add a red light to Supervisor instances having raised a failure.
-
Allow the display of a software name and icon at the top of the Supvisors Web UI. The options
software_nameandsoftware_iconhave been added to the Supvisors section of the Supervisor configuration file. -
All internal identifiers are now based on the
host:http_portformat. -
Rename the
DEPLOYMENTstate asDISTRIBUTIONstate to lift ambiguity ("deployment" is rather connoted when dealing with the orchestration domain). -
Rework Supvisors
RPCInterfaceexceptions. -
Rework the style of the Supvisors Web UI.
0.17.4 (2024-03-24)
-
Fix bug that was randomly blocking Supvisors on restart or shutdown, due to a stdout flush hanging in multiprocessing bowels. The statistics Process is now started before any other thread.
-
guesttime removed from because CPU calculation because it is already accounted inusertime on Linux. -
Fix process CPU so that it corresponds to the Linux
topresult. -
Use the latest versions of Sphinx-related modules for documentation, as
sphinx-5.0is now the minimal dependency.
0.17.3 (2023-12-14)
-
Fix regression when displaying the Network statistics in the Supvisors Web UI.
-
Add restrictions to
flask-restxdependencies.
0.17.2 (2023-12-04)
-
Fix rare I/O exception by joining the
SupervisorsProxythread before exiting theSupvisorsMainLoop. -
Fix rare exception when host network statistics are prepared for display in the Supvisors Web UI in the event where network interfaces have different history sizes.
-
Fix the Supvisors identifier possibilities when using the distribution rule
SINGLE_INSTANCE. -
Update the process statistics collector thread so that it exits by itself when
supervisordis killed. -
Improve the node selection when using the distribution rule
SINGLE_NODE. -
Use an asynchronous server in the Supvisors internal communications. The refactoring fixes an issue with the TCP server that sometimes wouldn't bind despite the
SO_REUSEADDRset. -
Restore the
actionclass in the HTML of the Supvisors Web UI. -
CI targets added for Python 3.11 and 3.12.
0.17 (2023-08-17)
-
Fix Issue #112. Write the disabilities file even if no call to
disableandenableXML-RPCs have been done. Try to create the folder at startup if it does not exist. -
Fix a case where the
Starterwould block if the process reaches the expected state without reception of the corresponding event. -
Fix typo for
zmqrequirement when installing Supvisors frompypi. -
Fix
flask-restxdependency in setup according to Python version. -
Fix uncaught exception the request to start a process is rejected due to a lack of resources. The exception was dependent from the Python version (absent in 3.6 but raised in 3.9).
-
Monkeypatch fix of Supervisor Issue #1596. Shutdown of the asyncore socket before it is closed.
-
Improve robustness against network failures. All Supervisor events are applied to the local Supvisors instance before they are published, so that it remains functional despite a network failure. The internal TCP sockets are rebound when a network interface becomes up (requires
psutil). -
Provide a discovery mode where the Supvisors instances are added on-the-fly without declaring them in the
supvisors_listoption. The function relies on a Multicast Group definition (optionsmulticast_group,multicast_interfaceandmulticast_ttladded to that purpose). The attributediscovery_modeis added to theget_stateandget_instance_infoXML-RPCs. -
Add a new option
stereotypesto support the discovery mode. Theidentifiersof the Application and Program rules can now reference a Supvisors stereotype in addition to identifiers and aliases. By extension, it is made available to the non-discovery mode. -
Add a new option
syncho_optionsto enable the user to choose the conditions putting an end to the Supvisors synchronization phase. More particularly when using the newUSERcondition, the Supvisors Web UI provides a means to end theINITIALIZATIONstate, with optional Master selection. The command is also available as an XML-RPCend_synchroand has been added tosupervisorctl. -
The new item
@in theidentifiersof the Program rules takes the behavior of the item#as it was before Supvisors version 0.13, i.e. the assignment is strictly limited by the length of theidentifierslist, without roll-over. NOTE: This is not available for Application rules. -
Use host aliases when looking for the local Supvisors instance.
-
Use IP address rather than host identification when dealing with
SINGLE_NODEstarting strategy. -
To prevent the situation that led the
Starterto block, a new stateCHECKEDis added toSupvisorsInstanceStates, which is actually a pre-RUNNINGstate. Such a Supvisors instance is considered active and is updated with received events but cannot be part of any starting sequence until all starting jobs in progress are completed. -
Limit the consideration of the process forced state to display in the Application page of the Supvisors Web UI, so that it does not interfere with the real process state.
-
Add
master_identifierto the output of the XML-RPCsget_supvisors_stateandget_instances_info. Thesupervisorctlcommandssstateandinstance_statushave also been updated. -
Monkeypatch Supervisor on-the-fly so that its logger is thread-safe and add log traces in Supvisors threads.
-
Simplify the Supvisors state machine and replace the states
RESTARTandSHUTDOWNby a single stateFINAL. -
Highlight the process line hovered by the cursor in the Supvisors Web UI.
-
Remove the figures from the Supvisors Web UI when
matplotlibis not installed. -
Add RPC
changeLogLevelto the JAVA client. -
Do not catch XmlRpc exceptions in the JAVA client.
-
Refactoring of the Supvisors internal communications.
0.16 (2023-03-12)
-
Add
websocketsas an option to the Supvisors event listener (Python 3.7+ only). -
Re-design the
PyZMQevent listener using thezmq.asynciosupport for better commonalities with thewesocketssolution. -
Re-design the statistics collection and compilation.
-
The option
stats_enabledtakes additional values to control host and process statistics independently. -
The option
stats_collecting_periodhas been added to set the minimum time between process statistics collection. -
The option
stats_periodsaccepts float values, not necessarily multiples of 5. -
Fix Issue #54. Add host and process statistics to the Supvisors event interface.
-
Fix children process CPU times in statistics.
-
Fix Solaris mode not taken into account for the process mean CPU value in the Supvisors Web UI.
-
Fix Flask
start_argsto pass the extra arguments in the URL attributes rather than in the route. -
Only one Supvisors instance is running when both
unix_http_serverandinet_http_serversections are defined in the supervisor configuration file. -
The local Supvisors instance is identified as the item having the same fully qualified domain name (as returned by
socket.gethostaddrandsocket.getfqdn) among the items of thesupvisors_listoption. -
Use the HTTP server port to help the identification of the local Supvisors instance when multiple items of the
supvisors_listoption fit and identifier is not set. -
The attribute
process_failureis added to theget_instance_infoXML-RPC to inform if there is a process failure in the Supvisors instance. The attribute is also provided in the event interface and in theinstance_statusoption of thesupervisorctlcommand. -
Raise an exception when the matching Supvisors instance in the
supvisors_listoption is inconsistent with the local configuration. -
Add a Supvisors logo.
0.15 (2022-11-20)
-
Publish / Subscribe pattern implemented for Supvisors internal communication.
PyZmqis now only used for the optional external publication interface. -
Make Supvisors robust to
addProcessGroup/removeProcessGroup/reloadConfigSupervisor XML-RPCs. -
Fix process CPU times in statistics so that children processes are all taken into account.
-
Fix regression in
supervisorctl application_ruleswhere the formerdistributedentry was still used instead ofdistribution. -
Fix uncaught exception when an unknown host name or IP address is used in the
supvisors_listoption. -
Fix
ProcessEventpublication when no resource is available to start a process. -
Fix
SupvisorsStatusevent in JAVA ZMQ client. -
Manage the
RuntimeErrorexception that could be raised by matplotlib when saving a graph. -
Add
all_startandall_start_argsto the list ofsupervisorctlcommands. These commands respectively invokesupervisor.startProcessandsupvisors.start_argson all running Supvisors instances. -
Add
tail_limitandtailf_limitoptions to override the default 1024 bytes used by Supervisor to display the Tail pages of the Web UI. -
Inactive Log Clear / Stdout / Stderr buttons in the Web UI if no stdout / stderr is configured.
-
Add resolution to
ProcessStatustime information and store event time, so that forced state is correctly considered. -
A process is not considered disabled anymore when process rules don't allow any candidate Supvisors instance.
-
When
psutilis not installed on a host, the statistics-related options of the Process and Host pages of the Web UI are not displayed, just as if the optionstats_enabledwas set toFalse. -
Clarify the exceptions that could be raised in Supvisors startup.
-
Add a FAQ to the documentation.
0.14 (2022-05-01)
-
Implement Supervisor Issue #1054. Start / Stop / Restart buttons have been added to groups in the Supervisor page of the Web UI so that it is possible to start / stop / restart all the processes of the group at once. The application state and description have been removed from this table as the information was confusing.
-
Fix issue where starting strategies would not work as expected when multiple Supvisors instances run on the same node but their
host_nameis identified differently in the optionsupvisors_list. -
Replace on-the-fly the Supervisor
gettagsfunction so that the XML-RPCsystem.methodSignatureworks with both Supervisor and Supvisors. -
Use
socket.gethostaddrto validate the host names provided in the optionsupvisors_list. -
In the Application page of the Web UI, apply a disabled status to programs that are disabled on all their possible Supvisors instances (according to rules and configuration).
-
Maintain the auto-refresh set on the Supvisors
restart/shutdownactions of the Web UI. -
Change the style of the matplotlib graphs.
0.13 (2022-02-27)
-
Implement Supervisor Issue #591. It is possible to disable/enable programs using the new
disableandenableXML-RPCs. A new optiondisabilities_filehas been added to support the persistence. Thedisabledstatus of the processes is made available through thesupvisors.get_local_process_infoXML-RPC and in the process table of the Web UI. -
Fix issue where Supvisors may be blocked in the
DEPLOYMENTphase due to late process events. -
Add a new
start_any_processXML-RPC that starts one process whose namespec matches the regular expression. -
Add a
waitparameter to theupdate_numprocsXML-RPC. -
Add the principle of Supvisors modes to the output of the XML-RPCs
get_supvisors_stateandget_instance_info. The modes are linked to the existence of jobs in progress inStarterandStopper. -
The Supvisors modes are displayed to the Main page of the Web UI and the Supvisors instance modes are displayed to the Process and Host pages of the Web UI. In the navigation menu, the local Supvisors instance points out the Supvisors instances where the modes are activated, and the applications involved in its own
StarterorStopper. -
When using the item
#in theidentifiersof the Application or Program rules and with a number of candidate applications or processes greater than the candidateidentifiers, the assignment is performed by rolling over theidentifierslist. -
Add pid and uptime information to the
supervisordentry of the process table in the Web UI. -
The application rules of a Supvisors rules file can be inserted in any order.
-
Protect the Supervisor thread against any exception that could be raised by Supvisors when processing a Supervisor event.
-
Provide a Flask server that can be added as a Supervisor program to interact with Supvisors using a REST API.
-
Update the CSS style of the inactive buttons in the Web UI.
-
Fix CSS resources table cell height with recent versions of Firefox.
-
Update the Web UI to allow multiple processes per line in the Supvisors instance boxes.
-
Remove support to deprecated option
distributedand to the possibility to have theprogramelement directly under theapplication elementin a Supvisors rules file.
0.12 (2022-01-26)
-
Fix crash following a
supervisorctl updateas the group added doesn't includeextra_argsandcommand_refattributes in the Supervisor internal structure. -
Fix crash when the state of the Supvisors master is received before any Supvisors instance has been confirmed.
-
Fix crash when receiving process state events from a Supvisors instance that has been checked while it was in a
RESTARTINGstate. -
Fix regression in Supvisors restarting / shutting down as the Master would actually restart / shut down before notifying the other Supvisors instances of its state. The new Supvisors state
RESTARThas been introduced. -
Add
supervisordentry to the process table of the Supvisors instance in the Web UI. This entry provides process statistics and the possibility to view the Supervisor logs. -
Fix issue in Web UI with the Solaris mode not applied to the process CPU plot.
-
Fix CSS for Supvisors instance boxes (table headers un-stickied) in the Main page of the Web UI.
-
Fix process children CPU times counted twice in statistics.
-
Add regex support to the
patternattribute of theapplicationandprogramelements of the Supvisors rules file. -
The
distributionoption has been added to replace thedistributedoption in the Supvisors rules file. Thedistributedoption is deprecated and will be removed in the next version. -
Update the starting strategies so that the node load is considered in the event where multiple Supvisors instances are running on the same node. The
LESS_LOADED_NODEandMOST_LOADED_NODEstarting strategies have been added. -
Update the
RunningFailureHandlerso thatStarterandStopperactions are all stored before they are actually triggered. -
Add the
RESTARTandSHUTDOWNstrategies to therunning_failure_strategyoption. -
Update
StarterandStopperso that event timeouts are based on ticks rather than time. -
Update
InfanticideStrategyandSenicideStrategyso that the conciliation uses theStopper. This avoids duplicated conciliation requests when entering theCONCILIATIONstate. -
When receiving a forced state due to a
StarterorStoppertimeout, check if the expected process state has been reached before actually forcing the state. Events may have crossed. -
The
programssection has been added in theapplicationsection of the Supvisors rules file. Allprogramdefinitions should be placed in this section rather than directly in theapplicationsection. The intention is for the next Supvisors version to be able to declare application options in any order. Note that havingprogramsections directly in theapplicationsection is still supported but deprecated and will be removed in the next version. -
Add the
starting_failure_strategyoption in theprogramsection of the Supvisors rules file. It supersedes the values eventually set in theapplicationsection. -
Add the
inactivity_ticksoption to the Supvisors section of the Supervisor configuration file to enable more flexibility in a congested system. -
Add
node_nameandportinformation to the result of theget_instance_infoXML-RPC and to the instance status of the Supvisors event listener. -
In the Process page of the Web UI, add buttons to shrink / expand all applications.
-
Use a different gradient in the Web UI for running processes that have ever crashed.
-
Fix CSS process table cell height with recent versions of Firefox.
-
Use hexadecimal strings for the
shexattribute in the Web UI URL. -
Add
actionclass to the start/stop/restart/shutdown buttons in the headers of the Supvisors web pages. -
Move PyZmq sockets creation to the main thread so that a bind error is made explicit in log traces.
-
Remove support to deprecated options, attributes and XML-RPCs (
address_list,force_synchro_if,rules_file,address_name,addresses,get_master_address,get_address_infoandget_all_addresses_info).
0.11 (2022-01-02)
-
Fix 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_master_identifier,get_instance_infoandget_all_instances_infohave been added to replaceget_master_address,get_address_infoandget_all_addresses_info. - The
supervisorctlcommandinstance_statushas been added to replaceaddress_status. - The XML-RPCs that would return attributes
address_nameandaddressesare now returningidentifierandidentifiersrespectively. This impacts the following XML-RPCs (and relatedsupervisorctlcommands):get_application_infoget_all_application_infoget_application_rulesget_address_infoget_all_addresses_infoget_all_process_infoget_process_infoget_process_rulesget_conflicts.
- The
supvisors_listoption has been added to replaceaddress_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 simplehost_nameis still supported in the event where Supvisors doesn't have to deal with multiple Supervisor instances on the same node. - The
core_identifiersoption has been added to replaceforce_synchro_ifin the Supvisors section of the Supervisor configuration file. It targets the names deduced from thesupvisors_listoption. - The
identifiersoption has been added to replace theaddressesoption in the Supvisors rules file. This option targets the names deduced from thesupvisors_listoption. - The
address-like attributes, XML-RPCs and options are deprecated and will be removed in the next version.
- The XML-RPCs
-
Fix 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
CHECKINGstate. -
Fix regression (missing disconnect) on node isolation when fencing is activated.
-
Fix issue in statistics compiler when network interfaces are dynamically created / removed.
-
Refactoring of
StarterandStopper. -
The module
rpcrequestshas been removed because useless. The functiongetRPCInterfaceof th modulesupervisor.childutilsdoes the job. -
The
startsecsandstopwaitsecsprogram options have been added to the results ofget_all_local_process_infoandget_local_process_info. -
The option
rules_fileis updated torules_filesand supports multiple files for Supvisors rules. The optionrules_fileis thus deprecated and will be removed in the next version. -
Add a new
restart_sequenceXML-RPC to trigger a full application start sequence. -
Update the
restart_applicationandrestart_processXML-RPC so that processes can restart themselves using them. -
Add
expected_exitto the output ofsupervisorctl sstatuswhen the process isEXITED. -
Add the new option
stats_enabledto enable/disable the statistics function. -
Update
start_process,stop_process,restart_process,process_rulesinsupervisorctlso that calls are made on each individually process rather than process group whenallis used as parameter. -
Add exit codes to erroneous Supvisors calls in
supervisorctl. -
When aborting jobs when re-entering the
INITIALIZATIONstate, clear the structure holding the jobs in progress. It has been found to stick Supvisors in theDEPLOYMENTstate in the event where the Master node is temporarilySILENT. -
Restrict the use of the XML-RPCs
start_application,stop_application,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.
0.10 (2021-09-05)
-
Implement Supervisor Issue #177. It is possible to update dynamically the program numprocs using the new
update_numprocsXML-RPC. -
Add targets Python 3.7 and Python 3.8 to Travis-CI.
0.9 (2021-08-31)
-
Enable the hashtag '#' for the
addressesof a non-distributed application. -
Add
supvisorsctlto pally the lack of support ofsupervisorctlwhen used with--serverurl URLoption. See related Supervisor Issue #1455. -
Provide
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
patternelements. -
Fix 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. -
When
stop_sequenceis not set in the rules files, it is defaulted to thestart_sequencevalue. With the new stop sequence logic, the stop sequence is by default exactly the opposite of the start sequence. -
Fix Nodes' column width for
supervisorctl application_rules. -
CHANGES.rstreplaced withCHANGES.md. -
'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.
0.8 (2021-08-22)
-
Fix exception in
INITIALIZATIONstate when the Master declared by other nodes is not RUNNING yet and the core nodes are RUNNING. -
Fix exception when program rules and extra arguments are tested against a program unknown to the local Supervisor.
-
Fix issue about program patterns that were applicable to all elements. The scope of program patterns is now limited to their owner application.
-
Fix 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. -
Fix issue about application state not updated after a node has become silent.
-
Fix issue when choosing a node in
Starter. Apply the requests that have not been satisfied yet for non-distributed applications. -
Review logic for application major / minor failures.
-
Simplify the insertion of applications to start or stop in Commander jobs.
-
Add support for application patterns in the Supvisors rules file.
-
In the Supvisors rules file,
patternelements are deprecated and are replaced byprogramelements with apatternattribute instead of anameattribute. Support forpatternelements will be removed in the next version of Supvisors. -
Node aliases have been added to the Supvisors 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 Applications 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 Supvisors 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:
supervisorctladdress_statusandapplication_info. -
The XML schema has been moved to a separate file
rules.xsd. -
Remove dependency to netifaces as psutil provides the function.
-
'Scenario 2' has been added to the Supvisors use cases.
-
A script
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.
0.7 (2021-08-15)
-
Fix 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.
-
Fix 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 Applications navigation menu of the Web UI, add a red light to applications having raised a failure.
-
New application rules
distributedandaddressesadded to the Supvisors rules file. Non-distributed applications have all their processes started on the same node chosen in accordance with theaddressesand thestarting_strategy. -
Add the
starting_strategyoption to theapplicationsection of the Supvisors rules file. -
Fix 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. -
Fix 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 Supervisorautorestartapplies. The SupvisorsRESTART_PROCESSapplies only when the node becomes inactive. -
Fix exception when forcing the state on a process that is unknown to the local Supervisor.
-
Promote the
RESTART_PROCESSintoRESTART_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 whenauto_fenceis activated, do not isolate nodes as long assynchro_timeouthas not passed. -
In the
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.
0.6 (2021-08-01)
-
Applications that are not declared in the Supvisors 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. -
Add RPC
change_log_levelto dynamically change the Supvisors logger level. -
Application state is evaluated only against the starting sequence of its processes.
-
Fix blocking issue when Master is stopped while in
DEPLOYMENTstate. -
Fix issue with applications that would not fully stop when using the
STOP_APPLICATIONstarting failure strategy. -
Fix issue related to Issue #85. An exception was raised when the program
procnumwas greater than the list of applicable nodes. -
Fix Issue #91. Fix CSS style on the process tables in HTML.
-
Fix Issue #90. The Supvisors Master node drives the transition to
OPERATION. -
In the Web UI, set the process state color to
FATALwhen the process has exited unexpectedly. -
Change the default expected loading to
0in theprogramsection of the Supvisors rules file. -
Python
Enumused for enumerations (not available in Python 2.7). -
Remove
supvisors_shortcutsfrom source code to get rid of IDE warnings. -
All unit tests updated from
unittesttopytest. -
Include this Change Log to documentation.
0.5 (2021-03-01)
-
New option
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. -
Fix Issue #87. Under particular circumstances, Supvisors could have multiple Master nodes.
-
Fix Issue #86. The starting and stopping sequences may fail and block when a sub-sequence includes only failed programs.
-
Fix Issue #85. When using
#in theaddress_listprogram rule of the Supvisors rules file, a subset of nodes can optionally be defined. -
Fix 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.
-
Fix 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
unittesttopytest. -
Logs (especially
debugandtrace) updated to remove printed objects.
0.4 (2021-02-14)
-
Auto-refresh button added to all pages.
-
Web UI Main page reworked by adding a subdivision of application in node boxes.
-
Fix exception when exiting using
Ctrl+cfrom shell. -
Fix exception when rules files is not provided.
0.3 (2020-12-29)
-
Fix Issue #81. When Supvisors logfile is set to
AUTO, Supvisors uses the same logger as Supervisor. -
Fix Issue #79. When
FATALorUNKNOWNProcess state is forced by Supvisors,spawnerrwas missing in the listener payload. -
Useless folder
rsc_refdeleted. -
designfolder moved to a dedicated GitHub repository. -
100% coverage reached in unit tests.
0.2 (2020-12-14)
-
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:
descriptionfield.clear logs,tail -f stdout,tail -f stderrbuttons.
-
Fix Issue #75. Supvisors takes into account the
usernameand thepasswordofinet_http_serverin thesupervisordsection. -
Fix Issue #17. The user selections on the web UI are passed to the URL.
-
Fix Issue #72. The extra arguments are shared between all Supvisors instances.
-
README.rstreplaced withREADME.md. -
Coverage improved in tests.
-
Docs target added to Travis-CI.
0.1 (2017-08-11)
Initial release.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file supvisors-0.19.1.tar.gz.
File metadata
- Download URL: supvisors-0.19.1.tar.gz
- Upload date:
- Size: 607.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f6cc582d9a8f5edbc844e64f0609c6d5a27bdbe4b98b298190f6c26a2a1f581
|
|
| MD5 |
a0caf57d457dc2b934eda30e221af821
|
|
| BLAKE2b-256 |
e4cfbb9cb4ec2653b75d68b997bf3c2502c18e6134b4d25803b4a057e0491e48
|
File details
Details for the file supvisors-0.19.1-py3-none-any.whl.
File metadata
- Download URL: supvisors-0.19.1-py3-none-any.whl
- Upload date:
- Size: 1.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f721dcb3bc303f48164aaeafadbfbebfed3aa42a2f22dc09d7dac4d0fffd55dd
|
|
| MD5 |
f09693296e03b4cb5effae2c61868703
|
|
| BLAKE2b-256 |
070f247b289055ff438eac00d12aacd2a615332c73f5aedd770ad49a8a827890
|