Add Show Datamodel API

https://blueprints.launchpad.net/watcher/+spec/show-datamodel-api

Problem description

The data model is very important for Watcher to generate resource optimization solutions. Currently, it can only be found by looking at the log file, which is very inconvenient. Therefore, it is necessary to add an api to facilitate the user to quickly view the current datamodel in memory.

Use Cases

As a Watcher user, I want to use Show Datamodel API to see the information of the instance in the specified scope.

Proposed change

We can refer to the “strategy list” command, add the command line interface in the python-watcherclient. After receiving the request, the watcher-api calls watcher-decision-engine to retrieve the information about the datamodel, then parses and returns.

The command line interface used in watcherclient could be like this:

  • openstack optimize datamodel list [–audit <audit_uuid>]

  • [–type <type>] [–detail]

In watcherclient, we can add “data_model.py,data_model_shell.py” to send datamodel list request and receive the result.

In watcher-api, we can add “data_model.py” to recieve the python-watcherclient’s request and call watcher-decision-engine module.

In watcher-decision-engine, we can get datamodel data according to the specified scope and the type, then parses the datamodel and return to watcher-api.

Alternatives

None

Data model impact

None

REST API impact

Add following data model REST:

  • GET /v1/data_model

    • Normal http response code(200)

    • Expected error http response code(400,401)

  • Request

    • audit_uuid (Optional): UUID of an audit

    • type (Optional): Type of data model user want to list

  • Response

    • server_uuid: UUID of server

    • server_name: name of server

    • server_vcpus: number of server vcpus

    • server_memory: memory of server

    • server_disk: disk of server

    • server_state: state of server

    • node_uuid: UUID of node

    • node_hostname: name of node

    • node_vcpus: number of node vcpus

    • node_vcpu_ratio: vcpu ratio of node

    • node_memory: memory of node

    • node_memory_ratio: memory ratio of node

    • node_disk: disk of node

    • node_disk_ratio: disk ratio of node

    • node_state: state of node

  • Example JSON representation of compute data model

{
    "context": [
        {
            "server_uuid": "1bf91464-9b41-428d-a11e-af691e5563bb",
            "server_name": "chenke-test1",
            "server_vcpus": "1",
            "server_memory": "512",
            "server_disk": "1",
            "server_state": "active",
            "node_uuid": "253e5dd0-9384-41ab-af13-4f2c2ce26112",
            "node_hostname": "localhost.localdomain",
            "node_vcpus": "4",
            "node_vcpu_ratio": "16.0",
            "node_memory": "16383",
            "node_memory_ratio": "1.5",
            "node_disk": "37"
            "node_disk_ratio": "1.0",
            "node_state": "up",
        },
        {
            "server_uuid": "e2cb5f6f-fa1d-4ba2-be1e-0bf02fa86ba4",
            "server_name": "chenke-test2",
            "server_vcpus": "1",
            "server_memory": "512",
            "server_disk": "1",
            "server_state": "active",
            "node_uuid": "253e5dd0-9384-41ab-af13-4f2c2ce26112",
            "node_hostname": "localhost.localdomain",
            "node_vcpus": "4",
            "node_vcpu_ratio": "16.0",
            "node_memory": "16383",
            "node_memory_ratio": "1.5",
            "node_disk": "37"
            "node_disk_ratio": "1.0",
            "node_state": "up",
        }
    ]
}

Security impact

None

Notifications impact

None

Other end user impact

The user can view the datamodel through the command below in python-watcherclient:

  • watcher datamodel list

and add the audit parameter to filter the datamodel in the specified scope:

  • watcher datamodel list [–audit <audit_uuid>]

Performance Impact

None

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

<chenker>

Other contributors:

<li-canwei2> , <yumeng-bao>

Work Items

  • Add watcher datamodel list command line interface in watcherclient.

  • Add verification and processing of request from watcherclient in watcher-api.

  • Add parsing, encapsulation, and return of datamodel in watcher-decision-engine.

Dependencies

None

Testing

Unit test on the watcher-decision-engine, python-watcherclient, watcher-api.

Documentation Impact

  • A documentation explaining how to use watcher datamodel list [–audit <audit_uuid>] [–type <type>] [–detail]

  • Update API Reference

  • Update REST API Version History

References

None

History

Revisions

Release Name

Description

Stein

Introduced

Train

Updated