コード例 #1
0
    def test_collect(self, publish_metric, connect_to_region, cloudwatch):
        config = get_collector_config(
            'ElbCollector',
            {
                'interval': 60,
                'regions': {
                    'us-west-1': {
                        'elb_names': ['elb1'],
                    }
                }
            })

        az = Mock()
        az.name = 'us-west-1a'

        ec2_conn = Mock()
        ec2_conn.get_all_zones = Mock()
        ec2_conn.get_all_zones.return_value = [az]
        connect_to_region.return_value = ec2_conn

        cw_conn = Mock()
        cw_conn.get_metric_statistics = Mock()
        ts = datetime.datetime.now().replace(second=0, microsecond=0)

        cw_conn.get_metric_statistics.side_effect = [
            [{u'Timestamp': ts, u'Average': 1.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Average': 2.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 3.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Average': 4.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 6.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 7.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 8.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 9.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 10.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 11.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 12.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Maximum': 13.0, u'Unit': u'Count'}],
            [{u'Timestamp': ts, u'Sum': 14.0, u'Unit': u'Count'}],
        ]

        cloudwatch.connect_to_region = Mock()
        cloudwatch.connect_to_region.return_value = cw_conn

        collector = ElbCollector(config, handlers=[])

        target = ts + datetime.timedelta(minutes=1)
        with mock.patch.object(datetime, 'datetime',
                               mock.Mock(wraps=datetime.datetime)) as patched:
            patched.now.return_value = target
            collector.collect()

        self.assertPublishedMetricMany(
            publish_metric,
            {
                'us-west-1a.elb1.HealthyHostCount': 1,
                'us-west-1a.elb1.UnhealthyHostCount': 2,
                'us-west-1a.elb1.RequestCount': 3,
                'us-west-1a.elb1.Latency': 4,
                'us-west-1a.elb1.HTTPCode_ELB_4XX': 6,
                'us-west-1a.elb1.HTTPCode_ELB_5XX': 7,
                'us-west-1a.elb1.HTTPCode_Backend_2XX': 8,
                'us-west-1a.elb1.HTTPCode_Backend_3XX': 9,
                'us-west-1a.elb1.HTTPCode_Backend_4XX': 10,
                'us-west-1a.elb1.HTTPCode_Backend_5XX': 11,
                'us-west-1a.elb1.BackendConnectionErrors': 12,
                'us-west-1a.elb1.SurgeQueueLength': 13,
                'us-west-1a.elb1.SpilloverCount': 14,
            })
コード例 #2
0
ファイル: testelb.py プロジェクト: GridSafe/Diamond
    def test_ignore(self, publish_metric, elb_connect_to_region, ec2_connect_to_region, cloudwatch):
        config = get_collector_config(
            "ElbCollector",
            {"enabled": True, "interval": 60, "regions": {"us-west-1": {}}, "elbs_ignored": ["^to_ignore"]},
        )

        az = Mock()
        az.name = "us-west-1a"

        ec2_conn = Mock()
        ec2_conn.get_all_zones = Mock()
        ec2_conn.get_all_zones.return_value = [az]
        ec2_connect_to_region.return_value = ec2_conn

        elb1 = Mock()
        elb1.name = "elb1"

        elb2 = Mock()
        elb2.name = "to_ignore"

        elb_conn = Mock()
        elb_conn.get_all_load_balancers = Mock()
        elb_conn.get_all_load_balancers.return_value = [elb1, elb2]
        elb_connect_to_region.return_value = elb_conn

        cw_conn = Mock()
        cw_conn.get_metric_statistics = Mock()
        ts = datetime.datetime.utcnow().replace(second=0, microsecond=0)

        cw_conn.get_metric_statistics.side_effect = [
            [{u"Timestamp": ts, u"Average": 1.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Average": 2.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 3.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Average": 4.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 6.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 7.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 8.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 9.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 10.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 11.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 12.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Maximum": 13.0, u"Unit": u"Count"}],
            [{u"Timestamp": ts, u"Sum": 14.0, u"Unit": u"Count"}],
        ]

        cloudwatch.connect_to_region = Mock()
        cloudwatch.connect_to_region.return_value = cw_conn

        collector = ElbCollector(config, handlers=[])

        target = ts + datetime.timedelta(minutes=1)
        with mock.patch.object(datetime, "datetime", mock.Mock(wraps=datetime.datetime)) as patched:
            patched.utcnow.return_value = target
            collector.collect()

        self.assertPublishedMetricMany(
            publish_metric,
            {
                "us-west-1a.elb1.HealthyHostCount": 1,
                "us-west-1a.elb1.UnHealthyHostCount": 2,
                "us-west-1a.elb1.RequestCount": 3,
                "us-west-1a.elb1.Latency": 4,
                "us-west-1a.elb1.HTTPCode_ELB_4XX": 6,
                "us-west-1a.elb1.HTTPCode_ELB_5XX": 7,
                "us-west-1a.elb1.HTTPCode_Backend_2XX": 8,
                "us-west-1a.elb1.HTTPCode_Backend_3XX": 9,
                "us-west-1a.elb1.HTTPCode_Backend_4XX": 10,
                "us-west-1a.elb1.HTTPCode_Backend_5XX": 11,
                "us-west-1a.elb1.BackendConnectionErrors": 12,
                "us-west-1a.elb1.SurgeQueueLength": 13,
                "us-west-1a.elb1.SpilloverCount": 14,
            },
        )