5
5
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
6
6
#
7
7
8
-
9
8
import io
10
9
import oci
11
- import requests
12
10
import logging
13
11
import json
14
12
from datetime import datetime , timedelta
15
13
from fdk import response
16
14
17
-
18
-
19
15
"""
20
16
Create Object Storage bucket 'metrics-export' in the specified Compartent, if it does not already exist.
21
17
Default access: Private
@@ -51,7 +47,7 @@ def deleteObjectIfExists(_source_namespace, _bucketname, _objectname, _object_st
51
47
raise
52
48
53
49
"""
54
- Perform api call to pull metrics
50
+ Perform api call to pull metrics from Monitoring Service
55
51
"""
56
52
def export_metrics (monitoring_client , _compartmentId , _namespace , _resource_group , _query , _startdtm , _enddtm , _resolution , logger ):
57
53
try :
@@ -74,7 +70,7 @@ def export_metrics(monitoring_client, _compartmentId, _namespace, _resource_grou
74
70
logger .error ("Error in export_metrics(): {}" .format (str (e )))
75
71
raise
76
72
"""
77
- Upload (put) metrics json file to bucket 'metrics-export'
73
+ Upload (put) metrics json file to bucket
78
74
"""
79
75
def putObject (_source_namespace , _bucketname , _objectname , _content , _object_storage_client , logger ):
80
76
try :
@@ -99,55 +95,53 @@ def handler(ctx, data: io.BytesIO=None):
99
95
# Retrieve the Function configuration values
100
96
# Parse input parameters and assign default values as needed
101
97
try :
102
- cfg = dict (ctx .Config ())
103
- try :
104
- _compartmentId = cfg ["compartmentId" ]
105
- except Exception as e :
98
+ body = json .loads (data .getvalue ())
99
+ _compartmentId = body .get ("compartmentId" )
100
+ if (_compartmentId == None ):
106
101
logger .error ('Mandatory key compartmentId not defined' )
107
102
raise
108
103
109
- try :
110
- _namespace = cfg ["namespace" ]
111
- except :
104
+ _namespace = body .get ("namespace" )
105
+ if (_namespace == None ):
112
106
logger .info ('Optional configuration key namespace unavailable. Will assign default value' )
113
107
_namespace = "oci_computeagent"
114
108
115
- try :
116
- _resource_group = cfg ["resource_group" ]
117
- except :
109
+ _resource_group = body .get ("resource_group" )
110
+ if (_resource_group == None ):
118
111
logger .info ('Optional configuration key resource_group unavailable. Will assign default value' )
119
112
_resource_group = ""
120
-
121
- try :
122
- _query = cfg ["query" ]
123
- except :
113
+
114
+ _query = body .get ("query" )
115
+ if (_query == None ):
124
116
logger .info ('Optional configuration key query unavailable. Will assign default value' )
125
117
_query = "CpuUtilization[1m].mean()"
126
-
127
- try :
128
- _startdtm = cfg ["startdtm" ]
129
- except :
118
+
119
+ _startdtm = body .get ("startdtm" )
120
+ if (_startdtm == None ):
130
121
logger .info ('Optional configuration key startdtm unavailable. Will assign default value' )
131
122
_startdtm = (datetime .now () + timedelta (hours = - 1 )).strftime ("%Y-%m-%dT%H:%M:%S.%fZ" )
132
123
133
- try :
134
- _enddtm = cfg ["enddtm" ]
135
- except :
124
+ _enddtm = body .get ("enddtm" )
125
+ if (_enddtm == None ):
136
126
logger .info ('Optional configuration key enddtm unavailable. Will assign default value' )
137
127
_enddtm = datetime .now ().strftime ("%Y-%m-%dT%H:%M:%S.%fZ" )
138
128
139
- try :
140
- _resolution = cfg ["resolution" ]
141
- except :
129
+ _resolution = body .get ("resolution" )
130
+ if (_resolution == None ):
142
131
logger .info ('Optional configuration key resolution unavailable. Will assign default value' )
143
132
_resolution = "1m"
144
133
145
-
134
+ # Default Object Storage bucket name. Update as required, following name format restrictions
135
+ # See the following link for guidelines:
136
+ # https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/managingbuckets.htm#bucketnames
146
137
bucketname = "metrics-export"
138
+
139
+ # Will use query end timestamp for insertion into filename
147
140
dt_string = _enddtm
148
141
149
- if (_resource_group .strip ()):
150
- objectname = _namespace + "-" + _resource_group + "-" + dt_string [0 :19 ] + ".json"
142
+ # Generate objectname [filename]
143
+ if (_resource_group ):
144
+ objectname = _namespace + "-" + _resource_group .strip () + "-" + dt_string [0 :19 ] + ".json"
151
145
else :
152
146
objectname = _namespace + "-" + dt_string [0 :19 ] + ".json"
153
147
@@ -180,4 +174,4 @@ def handler(ctx, data: io.BytesIO=None):
180
174
ctx ,
181
175
response_data = "" ,
182
176
headers = {"Content-Type" : "application/json" }
183
- )
177
+ )
0 commit comments