Example #1
0
 def get_metrics(self, start, end, period):
     from c7n.mu import LambdaManager, PolicyLambda
     manager = LambdaManager(self.policy.session_factory)
     values = manager.metrics([PolicyLambda(self.policy)], start, end,
                              period)[0]
     values.update(super(LambdaMode, self).get_metrics(start, end, period))
     return values
Example #2
0
    def test_mu_metrics(self):
        session_factory = self.replay_flight_data("test_mu_metrics")
        p = self.load_policy(
            {
                "name": "s3-bucket-policy",
                "resource": "s3",
                "mode": {
                    "type": "cloudtrail",
                    "events": ["CreateBucket"]
                },
                "actions": ["no-op"],
            },
            session_factory=session_factory)

        pl = PolicyLambda(p)
        mgr = LambdaManager(session_factory)
        end = datetime.utcnow()
        start = end - timedelta(1)
        results = mgr.metrics([pl], start, end, 3600)
        self.assertEqual(
            results,
            [{
                "Durations": [],
                "Errors": [],
                "Throttles": [],
                "Invocations": []
            }],
        )
Example #3
0
 def get_metrics(self, start, end, period):
     from c7n.mu import LambdaManager, PolicyLambda
     manager = LambdaManager(self.policy.session_factory)
     values = manager.metrics(
         [PolicyLambda(self.policy)], start, end, period)[0]
     values.update(
         super(LambdaMode, self).get_metrics(start, end, period))
     return values
Example #4
0
    def get_metrics(self, start, end, period):
        # Avoiding runtime lambda dep, premature optimization?
        from c7n.mu import PolicyLambda, LambdaManager

        values = {}
        # Pickup lambda specific metrics (errors, invocations, durations)
        if self.is_lambda:
            manager = LambdaManager(self.session_factory)
            values = manager.metrics([PolicyLambda(self)], start, end,
                                     period)[0]
            metrics = ['ResourceCount']
        else:
            metrics = ['ResourceCount', 'ResourceTime', 'ActionTime']

        default_dimensions = {
            'Policy': self.name,
            'ResType': self.resource_type,
            'Scope': 'Policy'
        }

        # Support action, and filter custom metrics
        for el in itertools.chain(self.resource_manager.actions,
                                  self.resource_manager.filters):
            if el.metrics:
                metrics.extend(el.metrics)

        session = utils.local_session(self.session_factory)
        client = session.client('cloudwatch')

        for m in metrics:
            if isinstance(m, basestring):
                dimensions = default_dimensions
            else:
                m, m_dimensions = m
                dimensions = dict(default_dimensions)
                dimensions.update(m_dimensions)
            results = client.get_metric_statistics(
                Namespace=DEFAULT_NAMESPACE,
                Dimensions=[{
                    'Name': k,
                    'Value': v
                } for k, v in dimensions.items()],
                Statistics=['Sum', 'Average'],
                StartTime=start,
                EndTime=end,
                Period=period,
                MetricName=m)
            values[m] = results['Datapoints']
        return values
Example #5
0
    def get_metrics(self, start, end, period):
        # Avoiding runtime lambda dep, premature optimization?
        from c7n.mu import PolicyLambda, LambdaManager

        values = {}
        # Pickup lambda specific metrics (errors, invocations, durations)
        if self.is_lambda:
            manager = LambdaManager(self.session_factory)
            values = manager.metrics(
                [PolicyLambda(self)], start, end, period)[0]
            metrics = ['ResourceCount']
        else:
            metrics = ['ResourceCount', 'ResourceTime', 'ActionTime']

        default_dimensions = {
            'Policy': self.name, 'ResType': self.resource_type,
            'Scope': 'Policy'}

        # Support action, and filter custom metrics
        for el in itertools.chain(
                self.resource_manager.actions, self.resource_manager.filters):
            if el.metrics:
                metrics.extend(el.metrics)

        session = utils.local_session(self.session_factory)
        client = session.client('cloudwatch')

        for m in metrics:
            if isinstance(m, basestring):
                dimensions = default_dimensions
            else:
                m, m_dimensions = m
                dimensions = dict(default_dimensions)
                dimensions.update(m_dimensions)
            results = client.get_metric_statistics(
                Namespace=DEFAULT_NAMESPACE,
                Dimensions=[
                    {'Name': k, 'Value': v} for k, v
                    in dimensions.items()],
                Statistics=['Sum', 'Average'],
                StartTime=start,
                EndTime=end,
                Period=period,
                MetricName=m)
            values[m] = results['Datapoints']
        return values
Example #6
0
 def test_mu_metrics(self):
     session_factory = self.replay_flight_data('test_mu_metrics')
     p = Policy({
         'resources': 's3',
         'name': 's3-bucket-policy',
         'resource': 's3',
         'mode': {
             'type': 'cloudtrail',
             'events': ['CreateBucket'],
             },
         'actions': ['no-op']}, Config.empty())
     pl = PolicyLambda(p)
     mgr = LambdaManager(session_factory)
     end = datetime.utcnow()
     start = end - timedelta(1)
     results = mgr.metrics([pl], start, end, 3600)
     self.assertEqual(
         results, [{'Durations': [], 'Errors': [],
                    'Throttles': [], 'Invocations': []}])
Example #7
0
 def test_mu_metrics(self):
     session_factory = self.replay_flight_data('test_mu_metrics')
     p = Policy({
         'resources': 's3',
         'name': 's3-bucket-policy',
         'resource': 's3',
         'mode': {
             'type': 'cloudtrail',
             'events': ['CreateBucket'],
             },
         'actions': ['no-op']}, Config.empty())
     pl = PolicyLambda(p)
     mgr = LambdaManager(session_factory)
     end = datetime.utcnow()
     start = end - timedelta(1)
     results = mgr.metrics([pl], start, end, 3600)
     self.assertEqual(
         results, [{'Durations': [], 'Errors': [],
                    'Throttles': [], 'Invocations': []}])
Example #8
0
 def test_mu_metrics(self):
     session_factory = self.replay_flight_data("test_mu_metrics")
     p = Policy(
         {
             "resources": "s3",
             "name": "s3-bucket-policy",
             "resource": "s3",
             "mode": {"type": "cloudtrail", "events": ["CreateBucket"]},
             "actions": ["no-op"],
         },
         Config.empty(),
     )
     pl = PolicyLambda(p)
     mgr = LambdaManager(session_factory)
     end = datetime.utcnow()
     start = end - timedelta(1)
     results = mgr.metrics([pl], start, end, 3600)
     self.assertEqual(
         results,
         [{"Durations": [], "Errors": [], "Throttles": [], "Invocations": []}],
     )
Example #9
0
def metrics(function, api, start, period):
    """lambda/api/db metrics"""
    from c7n.mu import LambdaManager
    manager = LambdaManager(boto3.Session)
    start = parse_date(start)
    period = int(abs(parse_timedelta(period).total_seconds()))

    print("Lambda Metrics")
    metrics = manager.metrics([{
        'FunctionName': function
    }],
                              start=start,
                              end=datetime.utcnow(),
                              period=period)
    for k in ('Invocations', 'Throttles', 'Errors'):
        values = [n['Sum'] for n in metrics[0][k]]
        render_metrics(k, values)

    if not api:
        return

    print("Api Metrics")
    metrics = gateway_metrics(boto3.Session, api, "latest", start,
                              datetime.utcnow(), period)
    for k, data in metrics.items():
        if "Count" in k:
            values = [n['Sum'] for n in data]
        else:
            values = [n['Average'] for n in data]
        render_metrics(k, values)

    print("Db Metrics")
    metrics = db_metrics(boto3.Session, "Sphere11.Dev.ResourceLocks", start,
                         datetime.utcnow(), period)
    for k, data in metrics.items():
        values = [n['Average'] for n in data]
        render_metrics(k, values)
Example #10
0
def metrics(function, api, start, period):
    """lambda/api/db metrics"""
    from c7n.mu import LambdaManager
    manager = LambdaManager(boto3.Session)
    start = parse_date(start)
    period = int(abs(parse_timedelta(period).total_seconds()))

    print("Lambda Metrics")
    metrics = manager.metrics(
        [{'FunctionName': function}],
        start=start, end=datetime.utcnow(),
        period=period)
    for k in ('Invocations', 'Throttles', 'Errors'):
        values = [n['Sum'] for n in metrics[0][k]]
        render_metrics(k, values)

    if not api:
        return

    print("Api Metrics")
    metrics = gateway_metrics(
        boto3.Session, api, "latest", start, datetime.utcnow(), period)
    for k, data in metrics.items():
        if "Count" in k:
            values = [n['Sum'] for n in data]
        else:
            values = [n['Average'] for n in data]
        render_metrics(k, values)

    print("Db Metrics")
    metrics = db_metrics(
        boto3.Session, "Sphere11.Dev.ResourceLocks",
        start, datetime.utcnow(), period)
    for k, data in metrics.items():
        values = [n['Average'] for n in data]
        render_metrics(k, values)