def updateStats(self, current, stats): # Gather specific information and aggregate into our persistent stats adjustedMethod = getAdjustedMethodName(stats) adjustedClient = getAdjustedClientName(stats) if current["requests"] == 0: current["cpu"] = 0.0 current["requests"] += 1 current["method"][adjustedMethod] += 1 current["method-t"][adjustedMethod] += stats.get("t", 0.0) current["uid"][stats["uid"]] += 1 current["user-agent"][adjustedClient] += 1 if stats["statusCode"] >= 500: current["500"] += 1 elif stats["statusCode"] == 401: current["401"] += 1 current["t"] += stats.get("t", 0.0) current["t-resp-wr"] += stats.get("t-resp-wr", 0.0) current["slots"] += stats.get("outstandingRequests", 0) current["max-slots"] = max( current["max-slots"], self.limiter.maxOutstandingRequests if hasattr(self, "limiter") else 0) current["cpu"] += self.systemStats.items["cpu use"] def histogramUpdate(t, key): if t >= 60000.0: current[key][">60s"] += 1 elif t >= 30000.0: current[key]["30s<->60s"] += 1 elif t >= 10000.0: current[key]["10s<->30s"] += 1 elif t >= 1000.0: current[key]["1s<->10s"] += 1 elif t >= 100.0: current[key]["100ms<->1s"] += 1 elif t >= 10.0: current[key]["10ms<->100ms"] += 1 else: current[key]["<10ms"] += 1 if t >= 1000.0: current[key]["Over 1s"] += 1 elif t >= 10000.0: current[key]["Over 10s"] += 1 t = stats.get("t", None) if t is not None: histogramUpdate(t, "T") current["T-MAX"] = max(current["T-MAX"], t) t = stats.get("t-resp-wr", None) if t is not None: histogramUpdate(t, "T-RESP-WR")
def updateStats(self, current, stats): # Gather specific information and aggregate into our persistent stats adjustedMethod = getAdjustedMethodName(stats) adjustedClient = getAdjustedClientName(stats) if current["requests"] == 0: current["cpu"] = 0.0 current["requests"] += 1 current["method"][adjustedMethod] += 1 current["method-t"][adjustedMethod] += stats.get("t", 0.0) current["uid"][stats["uid"]] += 1 current["user-agent"][adjustedClient] += 1 if stats["statusCode"] >= 500: current["500"] += 1 current["t"] += stats.get("t", 0.0) current["t-resp-wr"] += stats.get("t-resp-wr", 0.0) current["slots"] += stats.get("outstandingRequests", 0) current["cpu"] += self.systemStats.items["cpu use"] def histogramUpdate(t, key): if t >= 60000.0: current[key][">60s"] += 1 elif t >= 30000.0: current[key]["30s<->60s"] += 1 elif t >= 10000.0: current[key]["10s<->30s"] += 1 elif t >= 1000.0: current[key]["1s<->10s"] += 1 elif t >= 100.0: current[key]["100ms<->1s"] += 1 elif t >= 10.0: current[key]["10ms<->100ms"] += 1 else: current[key]["<10ms"] += 1 if t >= 1000.0: current[key]["Over 1s"] += 1 elif t >= 10000.0: current[key]["Over 10s"] += 1 t = stats.get("t", None) if t is not None: histogramUpdate(t, "T") current["T-MAX"] = max(current["T-MAX"], t) t = stats.get("t-resp-wr", None) if t is not None: histogramUpdate(t, "T-RESP-WR")
def test_getAdjustedMethodName(self): """ L{getAdjustedMethodName} returns the appropriate method. """ data = ( ("PROPFIND", "/calendars/users/user01/", {}, "PROPFIND Calendar Home",), ("PROPFIND", "/calendars/users/user01/", {"cached": "1"}, "PROPFIND cached Calendar Home",), ("PROPFIND", "/calendars/users/user01/ABC/", {}, "PROPFIND Calendar",), ("PROPFIND", "/calendars/users/user01/inbox/", {}, "PROPFIND Inbox",), ("PROPFIND", "/addressbooks/users/user01/", {}, "PROPFIND Adbk Home",), ("PROPFIND", "/addressbooks/users/user01/", {"cached": "1"}, "PROPFIND cached Adbk Home",), ("PROPFIND", "/addressbooks/users/user01/ABC/", {}, "PROPFIND Adbk",), ("PROPFIND", "/addressbooks/users/user01/inbox/", {}, "PROPFIND Adbk",), ("PROPFIND", "/principals/users/user01/", {}, "PROPFIND Principals",), ("PROPFIND", "/principals/users/user01/", {"cached": "1"}, "PROPFIND cached Principals",), ("PROPFIND", "/.well-known/caldav", {}, "PROPFIND",), ("REPORT(CalDAV:sync-collection)", "/calendars/users/user01/ABC/", {}, "REPORT cal-sync",), ("REPORT(CalDAV:calendar-query)", "/calendars/users/user01/ABC/", {}, "REPORT cal-query",), ("POST", "/calendars/users/user01/", {}, "POST Calendar Home",), ("POST", "/calendars/users/user01/outbox/", {"recipients": "1"}, "POST Freebusy",), ("POST", "/calendars/users/user01/outbox/", {}, "POST Outbox",), ("POST", "/apns", {}, "POST apns",), ("PUT", "/calendars/users/user01/calendar/1.ics", {}, "PUT ics",), ("PUT", "/calendars/users/user01/calendar/1.ics", {"itip.requests": "1"}, "PUT Organizer",), ("PUT", "/calendars/users/user01/calendar/1.ics", {"itip.reply": "1"}, "PUT Attendee",), ("GET", "/calendars/users/user01/", {}, "GET Calendar Home",), ("GET", "/calendars/users/user01/calendar/", {}, "GET Calendar",), ("GET", "/calendars/users/user01/calendar/1.ics", {}, "GET ics",), ("DELETE", "/calendars/users/user01/", {}, "DELETE Calendar Home",), ("DELETE", "/calendars/users/user01/calendar/", {}, "DELETE Calendar",), ("DELETE", "/calendars/users/user01/calendar/1.ics", {}, "DELETE ics",), ("DELETE", "/calendars/users/user01/inbox/1.ics", {}, "DELETE inbox ics",), ("ACL", "/calendars/users/user01/", {}, "ACL",), ) for method, uri, extras, result in data: extras["method"] = method extras["uri"] = uri self.assertEqual(getAdjustedMethodName(extras), result, "Failed getAdjustedMethodName: %s" % (result,))
def test_getAdjustedMethodName(self): """ L{getAdjustedMethodName} returns the appropriate method. """ data = ( ("PROPFIND", "/calendars/users/user01/", {}, "PROPFIND Calendar Home",), ("PROPFIND", "/calendars/users/user01/", {"cached": "1"}, "PROPFIND cached Calendar Home",), ("PROPFIND", "/calendars/users/user01/ABC/", {}, "PROPFIND Calendar",), ("PROPFIND", "/calendars/users/user01/inbox/", {}, "PROPFIND Inbox",), ("PROPFIND", "/addressbooks/users/user01/", {}, "PROPFIND Adbk Home",), ("PROPFIND", "/addressbooks/users/user01/", {"cached": "1"}, "PROPFIND cached Adbk Home",), ("PROPFIND", "/addressbooks/users/user01/ABC/", {}, "PROPFIND Adbk",), ("PROPFIND", "/addressbooks/users/user01/inbox/", {}, "PROPFIND Adbk",), ("PROPFIND", "/principals/users/user01/", {}, "PROPFIND Principals",), ("PROPFIND", "/principals/users/user01/", {"cached": "1"}, "PROPFIND cached Principals",), ("PROPFIND", "/.well-known/caldav", {}, "PROPFIND",), ("REPORT(CalDAV:sync-collection)", "/calendars/users/user01/ABC/", {}, "REPORT cal-sync",), ("REPORT(CalDAV:calendar-query)", "/calendars/users/user01/ABC/", {}, "REPORT cal-query",), ("POST", "/calendars/users/user01/", {}, "POST Calendar Home",), ("POST", "/calendars/users/user01/outbox/", {"recipients": "1"}, "POST Freebusy",), ("POST", "/calendars/users/user01/outbox/", {}, "POST Outbox",), ("POST", "/apns", {}, "POST apns",), ("PUT", "/calendars/users/user01/calendar/1.ics", {}, "PUT ics",), ("PUT", "/calendars/users/user01/calendar/1.ics", {"itip.requests": "1"}, "PUT Organizer",), ("PUT", "/calendars/users/user01/calendar/1.ics", {"itip.reply": "1"}, "PUT Attendee",), ("GET", "/calendars/users/user01/", {}, "GET Calendar Home",), ("GET", "/calendars/users/user01/calendar/", {}, "GET Calendar",), ("GET", "/calendars/users/user01/calendar/1.ics", {}, "GET ics",), ("DELETE", "/calendars/users/user01/", {}, "DELETE Calendar Home",), ("DELETE", "/calendars/users/user01/calendar/", {}, "DELETE Calendar",), ("DELETE", "/calendars/users/user01/calendar/1.ics", {}, "DELETE ics",), ("DELETE", "/calendars/users/user01/inbox/1.ics", {}, "DELETE inbox ics",), ("ACL", "/calendars/users/user01/", {}, "ACL",), ) for method, uri, extras, result in data: extras["method"] = method extras["uri"] = uri self.assertEqual(getAdjustedMethodName(extras), result, "Failed getAdjustedMethodName: %s" % (result,))