Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
metric_id: metric-managed-iam-workspace
name: Workspace Count
metric_type: GAUGE
resource_type: identity.Workspace
query_options:
group_by:
- key: state
name: State
default: true
- key: is_dormant
name: Dormant
fields:
value:
operator: count
unit: Count
namespace_id: ns-managed-iam-summary
version: '1.0'
6 changes: 6 additions & 0 deletions src/spaceone/inventory/manager/identity_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,9 @@ def analyze_service_accounts(self, query: dict, domain_id: str) -> dict:
return self.identity_conn.dispatch(
"ServiceAccount.analyze", {"query": query}, x_domain_id=domain_id
)

def analyze_workspaces(self, query: dict, domain_id: str) -> dict:
# For background job, use system token
return self.identity_conn.dispatch(
"Workspace.analyze", {"query": query}, x_domain_id=domain_id
)
36 changes: 36 additions & 0 deletions src/spaceone/inventory/manager/metric_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,8 @@ def analyze_resource(
)
elif metric_vo.resource_type == "identity.ServiceAccount":
return self._analyze_service_accounts(query, domain_id)
elif metric_vo.resource_type == "identity.Workspace":
return self._analyze_workspaces(query, domain_id)
else:
raise ERROR_NOT_SUPPORT_RESOURCE_TYPE(resource_type=resource_type)
except Exception as e:
Expand Down Expand Up @@ -752,3 +754,37 @@ def _analyze_service_accounts(query: dict, domain_id: str) -> list:
response = identity_mgr.analyze_service_accounts(query, domain_id)

return response.get("results", [])

@staticmethod
def _analyze_workspaces(query: dict, domain_id: str) -> list:
default_group_by = [
"workspace_id",
]
changed_group_by = []
changed_group_by += copy.deepcopy(default_group_by)

for group_option in query.get("group_by", []):
if isinstance(group_option, dict):
key = group_option.get("key")
else:
key = group_option

if key not in default_group_by:
changed_group_by.append(group_option)

query["group_by"] = changed_group_by
query["filter"] = query.get("filter", [])
query["filter"].append({"k": "domain_id", "v": domain_id, "o": "eq"})

if "select" in query:
for group_by_key in ["workspace_id"]:
query["select"][group_by_key] = group_by_key

_LOGGER.debug(
f"[_analyze_workspace] Analyze Workspace Query: {query}"
)

identity_mgr = IdentityManager()
response = identity_mgr.analyze_workspaces(query, domain_id)

return response.get("results", [])
Loading