From 79d596a07eb2dfa5a35d7a6d38745c3374739cef Mon Sep 17 00:00:00 2001 From: Adam King Date: Mon, 29 Nov 2021 15:58:26 -0500 Subject: [PATCH] mgr/cephadm: agent: log response from mgr Signed-off-by: Adam King --- src/cephadm/cephadm | 7 ++++++- src/pybind/mgr/cephadm/agent.py | 23 +++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index f262bb1b7f6cf..90232f890a90d 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -3719,7 +3719,12 @@ WantedBy=ceph-{fsid}.target url = f'https://{self.target_ip}:{self.target_port}/data' try: req = Request(url, data, {'Content-Type': 'application/json'}) - urlopen(req, context=ssl_ctx) + send_time = time.monotonic() + with urlopen(req, context=ssl_ctx) as response: + response_str = response.read() + response_json = json.loads(response_str) + total_request_time = datetime.timedelta(seconds=(time.monotonic() - send_time)).total_seconds() + logger.info(f'Received mgr response: "{response_json["result"]}" {total_request_time} seconds after sending request.') except Exception as e: logger.error(f'Failed to send metadata to mgr: {e}') diff --git a/src/pybind/mgr/cephadm/agent.py b/src/pybind/mgr/cephadm/agent.py index c1609e042be46..a95cedd5bb78f 100644 --- a/src/pybind/mgr/cephadm/agent.py +++ b/src/pybind/mgr/cephadm/agent.py @@ -144,17 +144,21 @@ class HostData: self.mgr = mgr @cherrypy.tools.json_in() - def POST(self) -> None: + @cherrypy.tools.json_out() + def POST(self) -> Dict[str, Any]: data: Dict[str, Any] = cherrypy.request.json + results: Dict[str, Any] = {} try: self.check_request_fields(data) except Exception as e: + results['result'] = f'Bad metadata: {e}' self.mgr.log.warning(f'Received bad metadata from an agent: {e}') else: # if we got here, we've already verified the keyring of the agent. If # host agent is reporting on is marked offline, it shouldn't be any more self.mgr.offline_hosts_remove(data['host']) - self.handle_metadata(data) + results['result'] = self.handle_metadata(data) + return results def check_request_fields(self, data: Dict[str, Any]) -> None: fields = '{' + ', '.join([key for key in data.keys()]) + '}' @@ -188,16 +192,16 @@ class HostData: self.mgr.log.warning( f'Agent on host {host} reported incomplete metadata. Not all of {metadata_types_str} were present. Received fields {fields}') - def handle_metadata(self, data: Dict[str, Any]) -> None: + def handle_metadata(self, data: Dict[str, Any]) -> str: try: host = data['host'] self.mgr.cache.agent_ports[host] = int(data['port']) if host not in self.mgr.cache.agent_counter: - self.mgr.log.debug( - f'Got metadata from agent on host {host} with no known counter entry. Starting counter at 1 and requesting new metadata') self.mgr.cache.agent_counter[host] = 1 self.mgr.agent_helpers._request_agent_acks({host}) - return + res = f'Got metadata from agent on host {host} with no known counter entry. Starting counter at 1 and requesting new metadata' + self.mgr.log.debug(res) + return res # update timestamp of most recent agent update self.mgr.cache.agent_timestamp[host] = datetime_now() @@ -252,9 +256,12 @@ class HostData: self.mgr.log.debug( f'Received up-to-date metadata from agent on host {host}.') + return 'Successfully processed metadata.' + except Exception as e: - self.mgr.log.warning( - f'Failed to update metadata with metadata from agent on host {host}: {e}') + err_str = f'Failed to update metadata with metadata from agent on host {host}: {e}' + self.mgr.log.warning(err_str) + return err_str class AgentMessageThread(threading.Thread): -- 2.39.5