Beispiel #1
0
    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")
Beispiel #2
0
    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,))
Beispiel #4
0
    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,))