0
# Organization Impacts
1
2
Track specific impacts of service health events on organization assets. Organization impacts provide detailed information about which resources and projects are affected by service health incidents, enabling precise assessment of business impact.
3
4
## Capabilities
5
6
### List Organization Impacts
7
8
Retrieve a list of organization impacts showing how service health events affect specific assets within your organization.
9
10
```python { .api }
11
def list_organization_impacts(
12
request: ListOrganizationImpactsRequest = None,
13
*,
14
parent: str = None,
15
retry: Retry = None,
16
timeout: float = None,
17
metadata: Sequence[Tuple[str, str]] = ()
18
) -> ListOrganizationImpactsPager:
19
"""
20
Lists organization impacts for service health events.
21
22
Parameters:
23
- request: The request object containing all parameters
24
- parent: Required. Format: organizations/{org_id}/locations/{location}/organizationImpacts
25
- retry: Retry policy for the request
26
- timeout: Request timeout in seconds
27
- metadata: Additional metadata for the request
28
29
Returns:
30
ListOrganizationImpactsPager: Iterator over OrganizationImpact objects
31
"""
32
```
33
34
**Usage Example:**
35
36
```python
37
from google.cloud.servicehealth import ServiceHealthClient
38
39
client = ServiceHealthClient()
40
41
# List all organization impacts
42
parent = "organizations/123456789/locations/global/organizationImpacts"
43
impacts = client.list_organization_impacts(parent=parent)
44
45
for impact in impacts:
46
print(f"Impact on: {impact.asset.asset_name}")
47
print(f"Asset Type: {impact.asset.asset_type}")
48
print(f"Associated Events: {len(impact.events)}")
49
print("---")
50
51
# List impacts with filtering
52
recent_impacts = client.list_organization_impacts(
53
parent=parent,
54
filter='update_time>="2023-01-01T00:00:00Z"'
55
)
56
57
for impact in recent_impacts:
58
print(f"Recently Updated Impact: {impact.asset.asset_name}")
59
print(f"Last Updated: {impact.update_time}")
60
for event_name in impact.events:
61
print(f" Related Event: {event_name}")
62
```
63
64
### Get Organization Impact
65
66
Retrieve detailed information about a specific organization impact.
67
68
```python { .api }
69
def get_organization_impact(
70
request: GetOrganizationImpactRequest = None,
71
*,
72
name: str = None,
73
retry: Retry = None,
74
timeout: float = None,
75
metadata: Sequence[Tuple[str, str]] = ()
76
) -> OrganizationImpact:
77
"""
78
Gets details of a specific organization impact.
79
80
Parameters:
81
- request: The request object containing all parameters
82
- name: Required. Format: organizations/{org_id}/locations/global/organizationImpacts/{impact_id}
83
- retry: Retry policy for the request
84
- timeout: Request timeout in seconds
85
- metadata: Additional metadata for the request
86
87
Returns:
88
OrganizationImpact: The organization impact details
89
"""
90
```
91
92
**Usage Example:**
93
94
```python
95
# Get a specific organization impact
96
impact_name = "organizations/123456789/locations/global/organizationImpacts/impact-789"
97
impact = client.get_organization_impact(name=impact_name)
98
99
print(f"Impacted Asset: {impact.asset.asset_name}")
100
print(f"Asset Type: {impact.asset.asset_type}")
101
print(f"Last Update: {impact.update_time}")
102
103
# Get details about associated events
104
for event_name in impact.events:
105
# Extract event ID from full resource name
106
event_id = event_name.split('/')[-1]
107
print(f"Associated Event ID: {event_id}")
108
109
# Optionally fetch full event details
110
try:
111
event = client.get_organization_event(name=event_name)
112
print(f" Event Title: {event.title}")
113
print(f" Event State: {event.state}")
114
except Exception as e:
115
print(f" Could not fetch event details: {e}")
116
```
117
118
## Request Types
119
120
```python { .api }
121
class ListOrganizationImpactsRequest:
122
"""Request message for listing organization impacts."""
123
parent: str # Required: organizations/{org_id}/locations/{location}/organizationImpacts
124
page_size: int # Optional: 1-100, defaults to reasonable size
125
page_token: str # Optional: pagination token from previous response
126
filter: str # Optional: filter expression
127
128
class GetOrganizationImpactRequest:
129
"""Request message for getting a specific organization impact."""
130
name: str # Required: organizations/{org_id}/locations/global/organizationImpacts/{impact_id}
131
```
132
133
## Response Types
134
135
```python { .api }
136
class ListOrganizationImpactsResponse:
137
"""Response message for listing organization impacts."""
138
organization_impacts: List[OrganizationImpact] # List of impacts
139
next_page_token: str # Token for retrieving next page
140
unreachable: List[str] # Locations that could not be reached
141
142
class OrganizationImpact:
143
"""Represents impact of an event on organization assets."""
144
name: str # Output only: Resource name
145
events: List[str] # Output only: Associated event resource names
146
asset: Asset # Output only: Impacted asset information
147
update_time: datetime # Output only: Last update time
148
149
class Asset:
150
"""Represents a Google Cloud asset affected by a service health event."""
151
asset_name: str # Output only: Full resource name of the asset
152
asset_type: str # Output only: Asset type (e.g., "cloudresourcemanager.googleapis.com/Project")
153
```
154
155
## Impact Analysis
156
157
Organization impacts help answer critical questions about service health events:
158
159
**Asset Impact Assessment:**
160
```python
161
def assess_asset_impacts(organization_id: str):
162
"""Assess which assets are currently impacted by service health events."""
163
client = ServiceHealthClient()
164
parent = f"organizations/{organization_id}/locations/global/organizationImpacts"
165
166
# Group impacts by asset type
167
impact_summary = {}
168
169
for impact in client.list_organization_impacts(parent=parent):
170
asset_type = impact.asset.asset_type
171
if asset_type not in impact_summary:
172
impact_summary[asset_type] = []
173
174
impact_summary[asset_type].append({
175
'asset_name': impact.asset.asset_name,
176
'event_count': len(impact.events),
177
'last_update': impact.update_time
178
})
179
180
# Print summary
181
for asset_type, impacts in impact_summary.items():
182
print(f"\n{asset_type}: {len(impacts)} impacted assets")
183
for impact in impacts[:5]: # Show first 5
184
print(f" - {impact['asset_name']} ({impact['event_count']} events)")
185
```
186
187
**Event to Asset Mapping:**
188
```python
189
def map_events_to_assets(organization_id: str, event_name: str):
190
"""Find all assets impacted by a specific event."""
191
client = ServiceHealthClient()
192
parent = f"organizations/{organization_id}/locations/global/organizationImpacts"
193
194
# Filter impacts for specific event
195
filter_expr = f'events:"{event_name}"'
196
197
impacted_assets = []
198
for impact in client.list_organization_impacts(parent=parent, filter=filter_expr):
199
impacted_assets.append({
200
'asset_name': impact.asset.asset_name,
201
'asset_type': impact.asset.asset_type,
202
'update_time': impact.update_time
203
})
204
205
return impacted_assets
206
```
207
208
## Filtering Organization Impacts
209
210
The `filter` parameter supports various filtering expressions:
211
212
**Time-based filtering:**
213
```python
214
filter='update_time>="2023-01-01T00:00:00Z"' # Impacts updated after date
215
filter='update_time<="2023-12-31T23:59:59Z"' # Impacts updated before date
216
```
217
218
**Event-based filtering:**
219
```python
220
filter='events:"organizations/123/locations/global/organizationEvents/event-456"' # Impacts from specific event
221
```
222
223
**Asset type filtering:**
224
```python
225
filter='asset.asset_type="cloudresourcemanager.googleapis.com/Project"' # Only project impacts
226
filter='asset.asset_type="compute.googleapis.com/Instance"' # Only instance impacts
227
```
228
229
**Asset name filtering:**
230
```python
231
filter='asset.asset_name:"projects/my-project"' # Impacts on specific project
232
```
233
234
## Impact Monitoring and Alerting
235
236
```python
237
import time
238
from datetime import datetime, timedelta
239
240
def monitor_new_impacts(organization_id: str, check_interval: int = 300):
241
"""Monitor for new organization impacts and alert on changes."""
242
client = ServiceHealthClient()
243
parent = f"organizations/{organization_id}/locations/global/organizationImpacts"
244
245
# Track last check time
246
last_check = datetime.utcnow()
247
248
while True:
249
current_time = datetime.utcnow()
250
251
# Get impacts updated since last check
252
time_filter = f'update_time>="{last_check.isoformat()}Z"'
253
new_impacts = client.list_organization_impacts(parent=parent, filter=time_filter)
254
255
for impact in new_impacts:
256
print(f"NEW IMPACT DETECTED:")
257
print(f" Asset: {impact.asset.asset_name}")
258
print(f" Type: {impact.asset.asset_type}")
259
print(f" Events: {len(impact.events)}")
260
print(f" Updated: {impact.update_time}")
261
262
# Send alert (integrate with your alerting system)
263
send_impact_alert(impact)
264
265
last_check = current_time
266
time.sleep(check_interval)
267
268
def send_impact_alert(impact: OrganizationImpact):
269
"""Send alert about new organization impact (implement based on your needs)."""
270
# Example: send to monitoring system, email, Slack, etc.
271
print(f"ALERT: Asset {impact.asset.asset_name} impacted by service health event")
272
```
273
274
## Asset Types
275
276
Common asset types you may encounter in organization impacts:
277
278
```python
279
# Common Google Cloud asset types
280
COMMON_ASSET_TYPES = {
281
"cloudresourcemanager.googleapis.com/Project": "Google Cloud Project",
282
"compute.googleapis.com/Instance": "Compute Engine Instance",
283
"compute.googleapis.com/Disk": "Compute Engine Disk",
284
"storage.googleapis.com/Bucket": "Cloud Storage Bucket",
285
"sqladmin.googleapis.com/Instance": "Cloud SQL Instance",
286
"container.googleapis.com/Cluster": "GKE Cluster",
287
"appengine.googleapis.com/Application": "App Engine Application",
288
"cloudfunctions.googleapis.com/Function": "Cloud Function",
289
"pubsub.googleapis.com/Topic": "Pub/Sub Topic",
290
"pubsub.googleapis.com/Subscription": "Pub/Sub Subscription"
291
}
292
293
def categorize_impacts_by_service(impacts: List[OrganizationImpact]):
294
"""Categorize impacts by Google Cloud service."""
295
service_impacts = {}
296
297
for impact in impacts:
298
asset_type = impact.asset.asset_type
299
service = asset_type.split('.')[0] if '.' in asset_type else 'unknown'
300
301
if service not in service_impacts:
302
service_impacts[service] = []
303
304
service_impacts[service].append(impact)
305
306
return service_impacts
307
```
308
309
## Integration with Events
310
311
Organization impacts are closely tied to organization events. Use both APIs together for comprehensive monitoring:
312
313
```python
314
def get_complete_impact_picture(organization_id: str, event_name: str):
315
"""Get complete picture of an event's impact on the organization."""
316
client = ServiceHealthClient()
317
318
# Get the event details
319
event = client.get_organization_event(name=event_name)
320
321
# Get all impacts for this event
322
impacts_parent = f"organizations/{organization_id}/locations/global/organizationImpacts"
323
filter_expr = f'events:"{event_name}"'
324
325
impacts = list(client.list_organization_impacts(
326
parent=impacts_parent,
327
filter=filter_expr
328
))
329
330
return {
331
'event': event,
332
'impact_count': len(impacts),
333
'impacted_assets': [impact.asset for impact in impacts],
334
'affected_services': set(impact.asset.asset_type.split('.')[0]
335
for impact in impacts if '.' in impact.asset.asset_type)
336
}
337
```