Skip to content
This repository was archived by the owner on Jan 4, 2024. It is now read-only.

Commit 396eb0d

Browse files
authored
Merge pull request #6 from Merlion-Crew/dax/UC-136_Log_to_customMetric
UC-136: Log model metric to `customMetric` table of App insights
2 parents 47e284c + a7ed2da commit 396eb0d

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

diabetes_regression/training/train_aml.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from train import split_data, train_model, get_model_metrics
3333

3434
from util.logger import setup
35+
from util.metric_logger import MetricLogger
3536
import logging
3637

3738
def register_dataset(
@@ -124,10 +125,12 @@ def main():
124125

125126
# Log the training parameters
126127
logging.info(f"Parameters: ", extra={'custom_dimensions': train_args})
128+
custom_dimension = {}
127129
for (k, v) in train_args.items():
128130
run.log(k, v)
129131
run.parent.log(k, v)
130132
logging.info(f"{k}: {v}")
133+
custom_dimension[f'Parameter: {k}'] = v
131134

132135
# Get the dataset
133136
if (dataset_name):
@@ -160,6 +163,10 @@ def main():
160163
run.log(k, v)
161164
run.parent.log(k, v)
162165
logging.info(f"{k}: {v}")
166+
# Log this metric to the `customMetric` table of App insights
167+
metric_logger = MetricLogger("Model metric: " + k)
168+
metric_logger.set_customdimension(custom_dimension)
169+
metric_logger.set_metric_value(float(v))
163170

164171
# Pass model file to next step
165172
os.makedirs(step_output_path, exist_ok=True)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from opencensus.ext.azure import metrics_exporter
2+
from opencensus.stats import aggregation as aggregation_module
3+
from opencensus.stats import measure as measure_module
4+
from opencensus.stats import stats as stats_module
5+
from opencensus.stats import view as view_module
6+
from opencensus.tags import tag_map as tag_map_module
7+
import os
8+
9+
class MetricLogger:
10+
def __init__(self, metric_name:str, custom_dimension_keys:list=[]):
11+
self.custom_dimension_keys = custom_dimension_keys
12+
stats = stats_module.stats
13+
view_manager = stats.view_manager
14+
stats_recorder = stats.stats_recorder
15+
self.metric_measure_module = measure_module.MeasureFloat("Metric", "", "")
16+
17+
request_view = view_module.View(metric_name, "",
18+
self.custom_dimension_keys,
19+
self.metric_measure_module,
20+
aggregation_module.LastValueAggregation())
21+
22+
exporter = metrics_exporter.new_metrics_exporter(connection_string=f'InstrumentationKey={os.environ.get("APPINSIGHTS_INSTRUMENTATION_KEY")}')
23+
24+
view_manager.register_exporter(exporter)
25+
26+
view_manager.register_view(request_view)
27+
self.mmap = stats_recorder.new_measurement_map()
28+
self.tmap = tag_map_module.TagMap()
29+
30+
def insert_customdimension(self, key: str, value: str):
31+
if key not in self.custom_dimension_keys:
32+
self.custom_dimension_keys.append(key)
33+
34+
self.tmap.insert(key, value)
35+
36+
def set_customdimension(self, custom_dimension: dict):
37+
for key, value in custom_dimension.items():
38+
self.insert_customdimension(key, str(value))
39+
40+
def set_metric_value(self, value:float):
41+
self.mmap.measure_float_put(self.metric_measure_module, value)
42+
self.mmap.record(self.tmap)

0 commit comments

Comments
 (0)