def test_returns_as_servers(self): """ Returns servers with AS metadata in it grouped by scaling group ID """ as_servers = ([{ 'metadata': { 'rax:auto_scaling_group_id': 'a' }, 'id': i } for i in range(5)] + [{ 'metadata': { 'rax:auto_scaling_group_id': 'b' }, 'id': i } for i in range(5, 8)] + [{ 'metadata': { 'rax:auto_scaling_group_id': 'a' }, 'id': 10 }]) servers = as_servers + [{'metadata': 'junk'}] * 3 eff = get_all_scaling_group_servers() body = {'servers': servers} sequence = [(service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None)] result = perform_sequence(sequence, eff) self.assertEqual(result, { 'a': as_servers[:5] + [as_servers[-1]], 'b': as_servers[5:8] })
def test_filters_on_user_criteria(self): """ Considers user provided filter if provided """ as_servers = ([{ 'metadata': { 'rax:auto_scaling_group_id': 'a' }, 'id': i } for i in range(5)] + [{ 'metadata': { 'rax:auto_scaling_group_id': 'b' }, 'id': i } for i in range(5, 8)]) servers = as_servers + [{'metadata': 'junk'}] * 3 eff = get_all_scaling_group_servers( server_predicate=lambda s: s['id'] % 3 == 0) body = {'servers': servers} sequence = [(service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None)] result = perform_sequence(sequence, eff) self.assertEqual(result, { 'a': [as_servers[0], as_servers[3]], 'b': [as_servers[6]] })
def test_filters_no_metadata(self): """ Servers without metadata are not included in the result. """ servers = [{'id': i} for i in range(10)] eff = get_all_scaling_group_servers() body = {'servers': servers} sequence = [(service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None)] result = perform_sequence(sequence, eff) self.assertEqual(result, {})
def test_filters_no_as_metadata(self): """ Does not include servers which have metadata but does not have AS info in it """ servers = [{'id': i, 'metadata': {}} for i in range(10)] eff = get_all_scaling_group_servers() body = {'servers': servers} sequence = [(service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None)] result = perform_sequence(sequence, eff) self.assertEqual(result, {})
def test_filters_no_metadata(self): """ Servers without metadata are not included in the result. """ servers = [{"id": i} for i in range(10)] eff = get_all_scaling_group_servers() body = {"servers": servers} sequence = [ (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None), ] result = perform_sequence(sequence, eff) self.assertEqual(result, {})
def test_with_changes_since(self): """ If given, servers are fetched based on changes_since """ since = datetime(2010, 10, 10, 10, 10, 0) eff = get_all_scaling_group_servers(changes_since=since) body = {'servers': []} sequence = [(service_request( **svc_request_args(changes_since=since, limit=100)).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None)] result = perform_sequence(sequence, eff) self.assertEqual(result, {})
def test_filters_no_as_metadata(self): """ Does not include servers which have metadata but does not have AS info in it """ servers = [{"id": i, "metadata": {}} for i in range(10)] eff = get_all_scaling_group_servers() body = {"servers": servers} sequence = [ (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None), ] result = perform_sequence(sequence, eff) self.assertEqual(result, {})
def test_with_changes_since(self): """ If given, servers are fetched based on changes_since """ since = datetime(2010, 10, 10, 10, 10, 0) eff = get_all_scaling_group_servers(changes_since=since) body = {'servers': []} sequence = [ (service_request( **svc_request_args(changes_since=since, limit=100)).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None) ] result = perform_sequence(sequence, eff) self.assertEqual(result, {})
def test_filters_on_user_criteria(self): """ Considers user provided filter if provided """ as_servers = [{"metadata": {"rax:auto_scaling_group_id": "a"}, "id": i} for i in range(5)] + [ {"metadata": {"rax:auto_scaling_group_id": "b"}, "id": i} for i in range(5, 8) ] servers = as_servers + [{"metadata": "junk"}] * 3 eff = get_all_scaling_group_servers(server_predicate=lambda s: s["id"] % 3 == 0) body = {"servers": servers} sequence = [ (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None), ] result = perform_sequence(sequence, eff) self.assertEqual(result, {"a": [as_servers[0], as_servers[3]], "b": [as_servers[6]]})
def test_returns_as_servers(self): """ Returns servers with AS metadata in it grouped by scaling group ID """ as_servers = ( [{"metadata": {"rax:auto_scaling_group_id": "a"}, "id": i} for i in range(5)] + [{"metadata": {"rax:auto_scaling_group_id": "b"}, "id": i} for i in range(5, 8)] + [{"metadata": {"rax:auto_scaling_group_id": "a"}, "id": 10}] ) servers = as_servers + [{"metadata": "junk"}] * 3 eff = get_all_scaling_group_servers() body = {"servers": servers} sequence = [ (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None), ] result = perform_sequence(sequence, eff) self.assertEqual(result, {"a": as_servers[:5] + [as_servers[-1]], "b": as_servers[5:8]})
def test_filters_on_user_criteria(self): """ Considers user provided filter if provided """ as_servers = ( [{'metadata': {'rax:auto_scaling_group_id': 'a'}, 'id': i} for i in range(5)] + [{'metadata': {'rax:auto_scaling_group_id': 'b'}, 'id': i} for i in range(5, 8)]) servers = as_servers + [{'metadata': 'junk'}] * 3 eff = get_all_scaling_group_servers( server_predicate=lambda s: s['id'] % 3 == 0) body = {'servers': servers} sequence = [ (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None) ] result = perform_sequence(sequence, eff) self.assertEqual( result, {'a': [as_servers[0], as_servers[3]], 'b': [as_servers[6]]})
def test_returns_as_servers(self): """ Returns servers with AS metadata in it grouped by scaling group ID """ as_servers = ( [{'metadata': {'rax:auto_scaling_group_id': 'a'}, 'id': i} for i in range(5)] + [{'metadata': {'rax:auto_scaling_group_id': 'b'}, 'id': i} for i in range(5, 8)] + [{'metadata': {'rax:auto_scaling_group_id': 'a'}, 'id': 10}]) servers = as_servers + [{'metadata': 'junk'}] * 3 eff = get_all_scaling_group_servers() body = {'servers': servers} sequence = [ (service_request(*self.req).intent, lambda i: (StubResponse(200, None), body)), (Log(mock.ANY, mock.ANY), lambda i: None) ] result = perform_sequence(sequence, eff) self.assertEqual( result, {'a': as_servers[:5] + [as_servers[-1]], 'b': as_servers[5:8]})
def get_all_metrics_effects(tenanted_groups, log, _print=False): """ Gather server data for and produce metrics for all groups across all tenants in a region :param dict tenanted_groups: Scaling groups grouped with tenantId :param bool _print: Should the function print while processing? :return: ``list`` of :obj:`Effect` of (``list`` of :obj:`GroupMetrics`) or None """ effs = [] for tenant_id, groups in tenanted_groups.iteritems(): eff = get_all_scaling_group_servers() eff = Effect(TenantScope(eff, tenant_id)) eff = eff.on(partial(get_tenant_metrics, tenant_id, groups, _print=_print)) eff = eff.on(list) eff = eff.on( error=lambda exc_info: log.err(exc_info_to_failure(exc_info))) effs.append(eff) return effs