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
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": [] }], )
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
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
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
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': []}])
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": []}], )
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)
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)