[WORKER] Change PING -> STATS, STATS -> METRICS

Gearman message actions need to change to maintain backward
compatibility. PING will revert back to STATS, and METRICS
will replace the STATS message.

Worker message documentation is also updated.

Change-Id: I1aa7478abcf29ffe5dbd512b2175dc5633548064
This commit is contained in:
David Shrewsbury 2014-01-08 14:56:50 -05:00
parent f35ddd0b1d
commit 1be91d326f
4 changed files with 71 additions and 27 deletions

View File

@ -31,11 +31,11 @@ Required Fields
^^^^^^^^^^^^^^^
* hpcs_action
* loadbalancers
* loadbalancers.protocol
* loadbalancers.nodes
* loadbalancers.nodes.address
* loadbalancers.nodes.port
* loadBalancers
* loadBalancers.protocol
* loadBalancers.nodes
* loadBalancers.nodes.address
* loadBalancers.nodes.port
Example Request
^^^^^^^^^^^^^^^
@ -44,7 +44,7 @@ Example Request
{
"hpcs_action": "UPDATE",
"loadbalancers": [
"loadBalancers": [
{
"name": "a-new-loadbalancer",
"protocol": "http",
@ -66,7 +66,7 @@ Example Response
{
"hpcs_action": "UPDATE",
"loadbalancers": [
"loadBalancers": [
{
"name": "a-new-loadbalancer",
"protocol": "http",
@ -271,8 +271,8 @@ Required Fields
* hpcs_object_store_basepath
* hpcs_object_store_endpoint
* hpcs_object_store_token
* loadbalancers
* loadbalancers.protocol
* loadBalancers
* loadBalancers.protocol
Example Request
^^^^^^^^^^^^^^^
@ -285,7 +285,7 @@ Example Request
"hpcs_object_store_endpoint": "https://example.com/v1/100",
"hpcs_object_store_token": "MY_AUTH_TOKEN",
"hpcs_object_store_type": "swift",
"loadbalancers": [
"loadBalancers": [
{
"id": "15",
"name": "lb #1",
@ -305,7 +305,7 @@ Example Response
"hpcs_object_store_endpoint": "https://example.com/v1/100",
"hpcs_object_store_token": "MY_AUTH_TOKEN",
"hpcs_object_store_type": "swift",
"loadbalancers": [
"loadBalancers": [
{
"id": "15",
"name": "lb #1",
@ -320,9 +320,9 @@ Example Response
STATS Message
-------------
The STATS message queries the worker for load balancer statistics. Currently,
this doesn't do more than verify that the HAProxy process is running and we
can successfully query its statistics socket.
The STATS message queries the worker for general availability (i.e., a ping)
Currently, this doesn't do more than verify that the HAProxy process is
running and we can successfully query its statistics socket.
Required Fields
^^^^^^^^^^^^^^^
@ -348,3 +348,47 @@ Example Response
"hpcs_response": "PASS"
}
METRICS Message
---------------
The METRICS message queries the worker for load balancer usage metrics.
The number of bytes out for each load balancer defined on the device
is returned in the response.
Required Fields
^^^^^^^^^^^^^^^
* hpcs_action
Example Request
^^^^^^^^^^^^^^^
.. code-block:: json
{
"hpcs_action": "METRICS"
}
Example Response
^^^^^^^^^^^^^^^^
.. code-block:: json
{
"hpcs_action": "METRICS",
"utc_start": "2014-01-09 15:11.45.704754",
"utc_end": "2014-01-09 16:10.00.72683",
"loadBalancers": [
{
"protocol": "HTTP",
"bytes_out": "12345"
},
{
"protocol": "TCP",
"bytes_out": "5678"
}
],
"hpcs_response": "PASS"
}

View File

@ -70,10 +70,10 @@ class LBaaSController(object):
return self._action_discover()
elif action == 'ARCHIVE':
return self._action_archive()
elif action == 'METRICS':
return self._action_metrics()
elif action == 'STATS':
return self._action_stats()
elif action == 'PING':
return self._action_ping()
elif action == 'DIAGNOSTICS':
return self._action_diagnostic()
else:
@ -488,7 +488,7 @@ class LBaaSController(object):
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_SUCCESS
return self.msg
def _action_ping(self):
def _action_stats(self):
"""
Get load balancer and node status.
@ -500,18 +500,18 @@ class LBaaSController(object):
try:
nodes = self.driver.get_status()
except NotImplementedError:
error = "Selected driver does not support PING action."
error = "Selected driver does not support STATS action."
LOG.error(error)
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
self.msg[self.ERROR_FIELD] = error
except DeletedStateError:
error = "Invalid operation PING on a deleted LB."
error = "Invalid operation STATS on a deleted LB."
LOG.error(error)
self.msg['status'] = 'DELETED'
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
self.msg[self.ERROR_FIELD] = error
except Exception as e:
LOG.error("PING failed: %s, %s" % (e.__class__, e))
LOG.error("STATS failed: %s, %s" % (e.__class__, e))
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
self.msg[self.ERROR_FIELD] = str(e)
else:
@ -522,9 +522,9 @@ class LBaaSController(object):
return self.msg
def _action_stats(self):
def _action_metrics(self):
"""
Get load balancer statistics
Get load balancer metrics
This type of request gets the number of bytes out for each load
balancer defined on the device. If both a TCP and HTTP load
@ -534,20 +534,20 @@ class LBaaSController(object):
try:
start, end, statistics = self.driver.get_statistics()
except NotImplementedError:
error = "Selected driver does not support STATS action."
error = "Selected driver does not support METRICS action."
LOG.error(error)
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
self.msg[self.ERROR_FIELD] = error
return self.msg
except DeletedStateError:
error = "Invalid operation STATS on a deleted LB."
error = "Invalid operation METRICS on a deleted LB."
LOG.error(error)
self.msg['status'] = 'DELETED'
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
self.msg[self.ERROR_FIELD] = error
return self.msg
except Exception as e:
LOG.error("STATS failed: %s, %s" % (e.__class__, e))
LOG.error("METRICS failed: %s, %s" % (e.__class__, e))
self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
self.msg[self.ERROR_FIELD] = str(e)
return self.msg

View File

@ -35,7 +35,7 @@ class StatisticsManager(object):
These are stats that we need to save because a state change in
the HAProxy service is causing it to restart. Since HAProxy stores
its stats in memory, they would otherwise be lost. We save them here
for consideration in the next STATS request.
for consideration in the next METRICS request.
* Last queried stats
These are total bytes out as reported from HAProxy the last time we

View File

@ -71,7 +71,7 @@ class UbuntuServices(services_base.ServicesBase):
if 'http' in results:
curr_http_bo = results['http']
# If we have unreported totals, then we haven't received a STATS
# If we have unreported totals, then we haven't received a METRICS
# call since the last restart and we need to carry over those totals.
curr_tcp_bo += unrpt_tcp_bo
curr_http_bo += unrpt_http_bo