]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/cephadm: agent: log response from mgr
authorAdam King <adking@redhat.com>
Mon, 29 Nov 2021 20:58:26 +0000 (15:58 -0500)
committerAdam King <adking@redhat.com>
Mon, 13 Dec 2021 20:38:49 +0000 (15:38 -0500)
Signed-off-by: Adam King <adking@redhat.com>
src/cephadm/cephadm
src/pybind/mgr/cephadm/agent.py

index f262bb1b7f6cfc20e96f9b7fe2ae848b50cc6815..90232f890a90d18a225005be0d813cec94311034 100755 (executable)
@@ -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}')
 
index c1609e042be4668b05214742e554622c66b3c163..a95cedd5bb78f168219b49acf74020d2f1d25e83 100644 (file)
@@ -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):