Service List API

StoryBoard link: https://storyboard.openstack.org/#!/story/2004897

This spec adds a new api for listing all vitrage services and their status.

Problem description

In a production cloud environment, Vitrage will have multiple services deployed on multiple hosts. This will enable an admin to find these services and get details like:

  • what is the node on which vitrage service is running,

  • what is the running status of vitrage service.

  • How long the vitrage services are running successfully.

Proposed change

A new api command vitrage service list will be added that will list all the vitrage services that are currently running, where are they running, their status and how long are they running.

Example of a response

[
    {
      "Created At": "2019-02-10T11:07:15+00:00",
      "Hostname": "controller-1",
      "Process Id": 23161,
      "Name": "ApiWorker worker(0)"
    },
    {
      "Created At": "2019-02-10T11:07:15+00:00",
      "Hostname": "controller-1",
      "Process Id": 23153,
      "Name": "EvaluatorWorker worker(0)"
    },
    {
      "Created At": "2019-02-10T11:07:15+00:00",
      "Hostname": "controller-1",
      "Process Id": 23155,
      "Name": "EvaluatorWorker worker(1)"
    },
    {
      "Created At": "2019-02-10T11:07:15+00:00",
      "Hostname": "controller-1",
      "Process Id": 23157,
      "Name": "EvaluatorWorker worker(2)"
    },
    {
      "Created At": "2019-02-10T11:07:15+00:00",
      "Hostname": "controller-1",
      "Process Id": 23158,
      "Name": "EvaluatorWorker worker(3)"
    },
    {
      "Created At": "2019-02-10T11:07:33+00:00",
      "Hostname": "controller-1",
      "Process Id": 23366,
      "Name": "MachineLearningService worker(0)"
    },
    {
      "Created At": "2019-02-10T11:07:35+00:00",
      "Hostname": "controller-1",
      "Process Id": 23475,
      "Name": "PersistorService worker(0)"
    },
    {
      "Created At": "2019-02-10T11:07:15+00:00",
      "Hostname": "controller-1",
      "Process Id": 23164,
      "Name": "SnmpParsingService worker(0)"
    },
    {
      "Created At": "2019-02-10T11:14:30+00:00",
      "Hostname": "controller-1",
      "Process Id": 25698,
      "Name": "vitrageuWSGI worker 1"
    },
    {
      "Created At": "2019-02-10T11:14:30+00:00",
      "Hostname": "controller-1",
      "Process Id": 25699,
      "Name": "vitrageuWSGI worker 2"
    },
    {
      "Created At": "2019-02-10T11:07:32+00:00",
      "Hostname": "controller-1",
      "Process Id": 23352,
      "Name": "VitrageNotifierService worker(0)"
    }
]

CLI Example

+----------------------------------+------------+--------------+---------------------------+
| Name                             | Process Id | Hostname     | Created At                |
+----------------------------------+------------+--------------+---------------------------+
| ApiWorker worker(0)              |      23161 | controller-1 | 2019-02-10T11:07:15+00:00 |
| EvaluatorWorker worker(0)        |      23153 | controller-1 | 2019-02-10T11:07:15+00:00 |
| EvaluatorWorker worker(1)        |      23155 | controller-1 | 2019-02-10T11:07:15+00:00 |
| EvaluatorWorker worker(2)        |      23157 | controller-1 | 2019-02-10T11:07:15+00:00 |
| EvaluatorWorker worker(3)        |      23158 | controller-1 | 2019-02-10T11:07:15+00:00 |
| MachineLearningService worker(0) |      23366 | controller-1 | 2019-02-10T11:07:33+00:00 |
| PersistorService worker(0)       |      23475 | controller-1 | 2019-02-10T11:07:35+00:00 |
| SnmpParsingService worker(0)     |      23164 | controller-1 | 2019-02-10T11:07:15+00:00 |
| vitrageuWSGI worker 1            |      25698 | controller-1 | 2019-02-10T11:14:30+00:00 |
| vitrageuWSGI worker 2            |      25699 | controller-1 | 2019-02-10T11:14:30+00:00 |
| VitrageNotifierService worker(0) |      23352 | controller-1 | 2019-02-10T11:07:32+00:00 |
+----------------------------------+------------+--------------+---------------------------+

Note: The cloud operator must pre-install zookeeper or other tooz backend component. Otherwise, an exception will be raised when users call the service REST API.

If vitrage is running in k8s cluster then this api might be redundant. Since k8s handles pods health and topology. We might make the service api communicate with the k8s api in this case to get all vitrage services and their statuses.

Data model impact

None.

REST API impact

New api will be added to vitrage to list the services.

Versioning impact

None.

Other end user impact

In order to support the api we will need a backend to store the information. We will use the tooz library that supports multiple backends see Tooz.

Deployer impact

The deployer must pre-install zookeeper or other tooz backend component In order to support the API.

When deploying a container then hostname must be changed so api will be readable.

Developer impact

We need to think what to do in case of a container deployment. docker by default has a hostname of the container id but it can be changed.

We might use an optional environment variable (e.g HOST_HOSTNAME) for host name if exist in case of a container that can be passed to the container.

Horizon impact

None.

Implementation

Assignee(s)

Primary assignee:

Eyal

Work Items

  • add tooz support

  • add new API to vitrage

  • add service list to vitrage client

  • Documentation and tests

Dependencies

Depends on the tooz library with a backend configured.

Testing

Unit tests, functional tests and tempest tests

Documentation Impact

The new api will be documented

References

None