<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Extension Metric in Extensions</title>
    <link>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/182525#M2091</link>
    <description>&lt;P&gt;Hi, this is the API to create 1.0 metrics in Dynatrace.&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v1/custom-metrics/put-custom-metric" target="_blank"&gt;https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v1/custom-metrics/put-custom-metric&lt;/A&gt;&lt;/P&gt;&lt;P&gt;I'd recommend you to move over to 2.0 though with the ingest metric API as it doesn't require declaring it first.&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v2/post-ingest-metrics" target="_blank"&gt;https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v2/post-ingest-metrics&lt;/A&gt;&lt;/P&gt;&lt;P&gt;It'd require you to use generic entities though instead of custom devices, so it'd be a bigger rewrite.&lt;/P&gt;&lt;P&gt;Mike&lt;/P&gt;</description>
    <pubDate>Tue, 15 Mar 2022 15:22:58 GMT</pubDate>
    <dc:creator>Mike_L</dc:creator>
    <dc:date>2022-03-15T15:22:58Z</dc:date>
    <item>
      <title>Extension metric error</title>
      <link>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/181997#M2080</link>
      <description>&lt;P&gt;Hello everyone,&lt;/P&gt;
&lt;P&gt;recently I've been editing an existing script that sends POST method into Dynatrace. As you can see in the code below, we are inserting data from a .csv file. The original code with its metrics already created in Dynatrace works fine. However, when I change the timeseriesId name, I get the following error:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;"2022-03-04 14:58:12,648 Erro ao incluir o payload: {'error': {'code': 400, 'message': 'Constraints violated.', 'constraintViolations': [{'path': 'series[0].timeseriesId', 'message': 'No configuration found for timeseries id.', 'parameterLocation': 'PAYLOAD_BODY', 'location': None}]}}, Json: {"displayName": "Inclus\u00e3o Proposta", "group": "XXXXXX", "type": "DMPS", "properties": {"u_name_abbreviation": "TZ", "path": "D:\\DynatraceExtension", "exe": "readCSV.py", "ServerExtension": "n2431237"}, "configUrl": "XXXXXX", "tags": ["TZ"], "series": [{"timeseriesId": "custom:motors_dmps_response_time_inc", "dimensions": {}, "dataPoints": "&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;pandas&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;sys&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;os&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;json&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;requests&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;logging&lt;BR /&gt;&lt;SPAN&gt;from &lt;/SPAN&gt;datetime &lt;SPAN&gt;import &lt;/SPAN&gt;datetime&lt;BR /&gt;&lt;SPAN&gt;from &lt;/SPAN&gt;pathlib &lt;SPAN&gt;import &lt;/SPAN&gt;Path&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;platform&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;requests&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;numpy &lt;SPAN&gt;as &lt;/SPAN&gt;np&lt;BR /&gt;&lt;BR /&gt;HEADER = {&lt;SPAN&gt;'Authorization'&lt;/SPAN&gt;:&lt;SPAN&gt;'Api-Token XXXXX'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'Content-Type'&lt;/SPAN&gt;:&lt;SPAN&gt;'application/json; charset=utf-8'&lt;/SPAN&gt;}&lt;BR /&gt;logging.basicConfig(&lt;SPAN&gt;filename&lt;/SPAN&gt;=&lt;SPAN&gt;'readCSV.log'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;level&lt;/SPAN&gt;=logging.INFO&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;format&lt;/SPAN&gt;=&lt;SPAN&gt;'%(asctime)s %(message)s'&lt;/SPAN&gt;)&lt;BR /&gt;directory = Path(&lt;SPAN&gt;r'XXXXXXX'&lt;/SPAN&gt;)&lt;BR /&gt;lockfile_history = &lt;SPAN&gt;'lastline_history.txt'&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;eventValidation&lt;/SPAN&gt;(payload):&lt;BR /&gt;    logging.info(&lt;SPAN&gt;'Metodo eventValidation'&lt;/SPAN&gt;)&lt;BR /&gt;    req = requests.Request(&lt;SPAN&gt;'POST'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'https://dynatracewebpre.dcbr01.corp/e/XXXXXX/api/v1/events'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;headers&lt;/SPAN&gt;=HEADER&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;=json.dumps(payload))&lt;BR /&gt;    response = requests.request(req.method&lt;SPAN&gt;, &lt;/SPAN&gt;req.url&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;=req.data&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;headers&lt;/SPAN&gt;=req.headers&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;verify&lt;/SPAN&gt;=&lt;SPAN&gt;False&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;response.status_code != &lt;SPAN&gt;200&lt;/SPAN&gt;:&lt;BR /&gt;        logging.error(&lt;SPAN&gt;'Erro ao incluir o payload: %s, Json: %s'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;response.json()&lt;SPAN&gt;,&lt;/SPAN&gt;json.dumps(payload))&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;sendMetrics&lt;/SPAN&gt;(timeseriesId&lt;SPAN&gt;,&lt;/SPAN&gt;dimension&lt;SPAN&gt;,&lt;/SPAN&gt;datapoints):&lt;BR /&gt;    logging.info(&lt;SPAN&gt;'Metodo sendMetrics'&lt;/SPAN&gt;)&lt;BR /&gt;    payload = {&lt;BR /&gt;        &lt;SPAN&gt;'displayName'&lt;/SPAN&gt;: &lt;SPAN&gt;'Inclusão Proposta'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;'group'&lt;/SPAN&gt;: &lt;SPAN&gt;'XXXXXXX'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;'type'&lt;/SPAN&gt;: &lt;SPAN&gt;'DMPS'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;'properties'&lt;/SPAN&gt;: {&lt;SPAN&gt;'u_name_abbreviation'&lt;/SPAN&gt;: &lt;SPAN&gt;'TZ'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'path'&lt;/SPAN&gt;:&lt;SPAN&gt;'D:\dynatrace'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'exe'&lt;/SPAN&gt;:&lt;SPAN&gt;'readCSV.py'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'ServerExtension'&lt;/SPAN&gt;:platform.uname()[&lt;SPAN&gt;1&lt;/SPAN&gt;]}&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;'configUrl'&lt;/SPAN&gt;:&lt;SPAN&gt;'XXXXXXX'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;'tags'&lt;/SPAN&gt;: [&lt;SPAN&gt;'TZ'&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;'series'&lt;/SPAN&gt;: [&lt;BR /&gt;            {&lt;BR /&gt;            &lt;SPAN&gt;'timeseriesId'&lt;/SPAN&gt;: &lt;SPAN&gt;'custom:'&lt;/SPAN&gt;+timeseriesId&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;'dimensions'&lt;/SPAN&gt;: dimension&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;'dataPoints'&lt;/SPAN&gt;: datapoints&lt;BR /&gt;                }]&lt;BR /&gt;        }&lt;BR /&gt;    req = requests.Request(&lt;SPAN&gt;'POST'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'https://dynatracewebpre.dcbr01.corp/e/XXXXXXXXXXX/api/v1/entity/infrastructure/custom/dmps_motorsInc'&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;headers&lt;/SPAN&gt;=HEADER&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;=json.dumps(payload))&lt;BR /&gt;    response = requests.request(req.method&lt;SPAN&gt;, &lt;/SPAN&gt;req.url&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;=req.data&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;headers&lt;/SPAN&gt;=req.headers&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;verify&lt;/SPAN&gt;=&lt;SPAN&gt;False&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;response.status_code != &lt;SPAN&gt;200&lt;/SPAN&gt;:&lt;BR /&gt;        logging.error(&lt;SPAN&gt;'Erro ao incluir o payload: %s, Json: %s'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;response.json()&lt;SPAN&gt;,&lt;/SPAN&gt;json.dumps(payload))&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;cd_situ_prop_flux&lt;/SPAN&gt;(group_name&lt;SPAN&gt;,&lt;/SPAN&gt;group_filter&lt;SPAN&gt;,&lt;/SPAN&gt;group_returncode):&lt;BR /&gt;    logging.info(&lt;SPAN&gt;'Metodo cd_situ_prop_flux'&lt;/SPAN&gt;)&lt;BR /&gt;    timeseriesId = &lt;SPAN&gt;'motors_requests_inc'&lt;BR /&gt;&lt;/SPAN&gt;    dimension = {&lt;SPAN&gt;'CD_ERRO_PROC'&lt;/SPAN&gt;:&lt;SPAN&gt;str&lt;/SPAN&gt;(group_returncode)&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;:group_name}&lt;BR /&gt;    data_groups = df[group_filter].groupby([&lt;SPAN&gt;'DH_INCL_MOVI'&lt;/SPAN&gt;])&lt;BR /&gt;    datapoints=[]&lt;BR /&gt;    &lt;SPAN&gt;for &lt;/SPAN&gt;timestamps_group&lt;SPAN&gt;, &lt;/SPAN&gt;metrics &lt;SPAN&gt;in &lt;/SPAN&gt;data_groups:&lt;BR /&gt;        timestamp = &lt;SPAN&gt;str&lt;/SPAN&gt;(datetime.strptime(timestamps_group&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'%Y-%m-%d-%H:%M'&lt;/SPAN&gt;).timestamp()).replace(&lt;SPAN&gt;"."&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;)&lt;BR /&gt;        datapoints.append([&lt;SPAN&gt;int&lt;/SPAN&gt;(timestamp[&lt;SPAN&gt;0&lt;/SPAN&gt;:&lt;SPAN&gt;10&lt;/SPAN&gt;]+&lt;SPAN&gt;'000'&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;len&lt;/SPAN&gt;(metrics)])&lt;BR /&gt;    sendMetrics(timeseriesId&lt;SPAN&gt;,&lt;/SPAN&gt;dimension&lt;SPAN&gt;,&lt;/SPAN&gt;datapoints)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;send_responseTime&lt;/SPAN&gt;(motor&lt;SPAN&gt;,&lt;/SPAN&gt;metric):&lt;BR /&gt;    dimension = {}&lt;BR /&gt;    logging.info(&lt;SPAN&gt;'Metodo send_responseTime, motor:%s'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;motor)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;motor == &lt;SPAN&gt;'ADT'&lt;/SPAN&gt;:&lt;BR /&gt;        timeseriesId = &lt;SPAN&gt;'motors_dmps_response_time_inc'&lt;BR /&gt;&lt;/SPAN&gt;        metricColumn = &lt;SPAN&gt;'SS_RSPT_DMPS'&lt;BR /&gt;&lt;/SPAN&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;motor == &lt;SPAN&gt;'RCS'&lt;/SPAN&gt;:&lt;BR /&gt;        timeseriesId = &lt;SPAN&gt;'motors_cntg_response_time_inc'&lt;BR /&gt;&lt;/SPAN&gt;        metricColumn = &lt;SPAN&gt;'SS_RSPT_CNTG'&lt;BR /&gt;&lt;/SPAN&gt;    datapoints=[]&lt;BR /&gt;    metricList = metric[[&lt;SPAN&gt;'DH_INCL_MOVI'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;metricColumn]].values.tolist()&lt;BR /&gt;    &lt;SPAN&gt;for &lt;/SPAN&gt;datametrics &lt;SPAN&gt;in &lt;/SPAN&gt;metricList:&lt;BR /&gt;        timestamp = &lt;SPAN&gt;str&lt;/SPAN&gt;(datetime.strptime(datametrics[&lt;SPAN&gt;0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'%Y-%m-%d-%H:%M'&lt;/SPAN&gt;).timestamp()).replace(&lt;SPAN&gt;"."&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;)&lt;BR /&gt;        datapoints.append([&lt;SPAN&gt;int&lt;/SPAN&gt;(timestamp[&lt;SPAN&gt;0&lt;/SPAN&gt;:&lt;SPAN&gt;10&lt;/SPAN&gt;]+&lt;SPAN&gt;'000'&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;/SPAN&gt;datametrics[&lt;SPAN&gt;1&lt;/SPAN&gt;]*&lt;SPAN&gt;1000&lt;/SPAN&gt;])&lt;BR /&gt;    sendMetrics(timeseriesId&lt;SPAN&gt;,&lt;/SPAN&gt;dimension&lt;SPAN&gt;,&lt;/SPAN&gt;datapoints)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;select_lastFiles&lt;/SPAN&gt;():&lt;BR /&gt;    logging.info(&lt;SPAN&gt;'Metodo select_lastFiles'&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;data_criacao &lt;/SPAN&gt;= &lt;SPAN&gt;lambda &lt;/SPAN&gt;f: f.stat().st_ctime&lt;BR /&gt;    data_modificacao = &lt;SPAN&gt;lambda &lt;/SPAN&gt;f: f.stat().st_mtime&lt;BR /&gt;    files = directory.glob(&lt;SPAN&gt;'*.csv'&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;sorted&lt;/SPAN&gt;(files&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;key&lt;/SPAN&gt;=data_modificacao&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;reverse&lt;/SPAN&gt;=&lt;SPAN&gt;True&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;delete_oldfiles&lt;/SPAN&gt;(last_files):&lt;BR /&gt;    logging.info(&lt;SPAN&gt;'Metodo delete_oldfiles'&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;datetime.now().strftime(&lt;SPAN&gt;'%Y%m%d'&lt;/SPAN&gt;) &lt;SPAN&gt;not in &lt;/SPAN&gt;last_files:&lt;BR /&gt;        logging.info(&lt;SPAN&gt;'Deletando arquivos no repositorio'&lt;/SPAN&gt;)&lt;BR /&gt;        files = os.listdir(directory)&lt;BR /&gt;        logging.info(&lt;SPAN&gt;'Deletando Arquivos do dia anterior...'&lt;/SPAN&gt;)&lt;BR /&gt;        &lt;SPAN&gt;for &lt;/SPAN&gt;filecsv &lt;SPAN&gt;in &lt;/SPAN&gt;files:&lt;BR /&gt;            csvfile = &lt;SPAN&gt;f'&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;directory&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;/&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;filecsv&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;'&lt;BR /&gt;&lt;/SPAN&gt;            os.remove(csvfile)&lt;BR /&gt;            &lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;main&lt;/SPAN&gt;():&lt;BR /&gt;    &lt;SPAN&gt;global &lt;/SPAN&gt;df&lt;BR /&gt;    &lt;SPAN&gt;try&lt;/SPAN&gt;:&lt;BR /&gt;        List_last_files = select_lastFiles() &lt;SPAN&gt;### Selecionando ultimo Arquivo&lt;BR /&gt;&lt;/SPAN&gt;        logging.info(List_last_files[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;len&lt;/SPAN&gt;(List_last_files) != &lt;SPAN&gt;0&lt;/SPAN&gt;:&lt;BR /&gt;            logging.info(&lt;SPAN&gt;'Iniciando'&lt;/SPAN&gt;)&lt;BR /&gt;            df=pandas.read_csv(List_last_files[&lt;SPAN&gt;0&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;delimiter&lt;/SPAN&gt;=&lt;SPAN&gt;';'&lt;/SPAN&gt;)&lt;BR /&gt;            df[&lt;SPAN&gt;'DH_INCL_MOVI_1'&lt;/SPAN&gt;] = df[&lt;SPAN&gt;'DH_INCL_MOVI'&lt;/SPAN&gt;]&lt;BR /&gt;            df[&lt;SPAN&gt;'DH_INCL_MOVI'&lt;/SPAN&gt;] = pandas.to_datetime(df[&lt;SPAN&gt;'DH_INCL_MOVI'&lt;/SPAN&gt;]&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;format&lt;/SPAN&gt;=&lt;SPAN&gt;'%Y-%m-%d-%H.%M.%S.%f'&lt;/SPAN&gt;).dt.strftime(&lt;SPAN&gt;'%Y-%m-%d-%H:%M'&lt;/SPAN&gt;)&lt;BR /&gt;            df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;] = df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;].replace(&lt;SPAN&gt;' '&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;regex&lt;/SPAN&gt;=&lt;SPAN&gt;True&lt;/SPAN&gt;)&lt;BR /&gt;            df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;] = df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;].replace(&lt;SPAN&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Unprocessed'&lt;/SPAN&gt;)&lt;BR /&gt;            motor_list = []&lt;BR /&gt;            percentMotores = (df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;].groupby(df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;]).count()/df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;].groupby(df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;]).count().sum())*&lt;SPAN&gt;100&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;&lt;SPAN&gt;'RCS' &lt;/SPAN&gt;&lt;SPAN&gt;in &lt;/SPAN&gt;percentMotores.index:&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;percentMotores[&lt;SPAN&gt;'RCS'&lt;/SPAN&gt;] &amp;gt; &lt;SPAN&gt;3&lt;/SPAN&gt;:&lt;BR /&gt;                    payload = {&lt;BR /&gt;                        &lt;SPAN&gt;"eventType"&lt;/SPAN&gt;: &lt;SPAN&gt;"ERROR_EVENT"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                        &lt;SPAN&gt;"attachRules"&lt;/SPAN&gt;: {&lt;BR /&gt;                        &lt;SPAN&gt;"entityIds"&lt;/SPAN&gt;: [&lt;BR /&gt;                            &lt;SPAN&gt;"CUSTOM_DEVICE-879884799A9C475A"&lt;BR /&gt;&lt;/SPAN&gt;                        ]}&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                        &lt;SPAN&gt;"customProperties"&lt;/SPAN&gt;: {&lt;BR /&gt;                            &lt;SPAN&gt;"Sigla"&lt;/SPAN&gt;:&lt;SPAN&gt;"TZ"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"Mensagem de Erro"&lt;/SPAN&gt;: &lt;SPAN&gt;"Execucao no motor de Contingencia Acima de 3% nos ultimos 15min"&lt;BR /&gt;&lt;/SPAN&gt;                        }&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                        &lt;SPAN&gt;"source"&lt;/SPAN&gt;: &lt;SPAN&gt;"PropostaMF"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                        &lt;SPAN&gt;"description"&lt;/SPAN&gt;: &lt;SPAN&gt;"Baixo desempenho na execucao do motor do ADT"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                        &lt;SPAN&gt;"title"&lt;/SPAN&gt;: &lt;SPAN&gt;"Alto volume no Motor Contingencia"&lt;BR /&gt;&lt;/SPAN&gt;                        }&lt;BR /&gt;                    eventValidation(payload)&lt;BR /&gt;            &lt;SPAN&gt;# dif_incl_envidmps(df)&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;motor_name&lt;SPAN&gt;,&lt;/SPAN&gt;metricMotors &lt;SPAN&gt;in &lt;/SPAN&gt;df.groupby([&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;]):&lt;BR /&gt;                motor_list.append(motor_name)&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;motor_name !=&lt;SPAN&gt;'Unprocessed'&lt;/SPAN&gt;:&lt;BR /&gt;                    send_responseTime(motor_name&lt;SPAN&gt;,&lt;/SPAN&gt;metricMotors)&lt;BR /&gt;&lt;BR /&gt;                &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;                    &lt;SPAN&gt;for &lt;/SPAN&gt;metricList &lt;SPAN&gt;in &lt;/SPAN&gt;metricMotors[[&lt;SPAN&gt;'DH_INCL_MOVI'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'CD_PROP'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'DS_MESG_ERRO'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'CD_ERRO_PROC'&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'CD_ERRO_SERV'&lt;/SPAN&gt;]].values.tolist():&lt;BR /&gt;                        payload = {&lt;BR /&gt;                            &lt;SPAN&gt;"eventType"&lt;/SPAN&gt;: &lt;SPAN&gt;"CUSTOM_ANNOTATION"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"start"&lt;/SPAN&gt;: &lt;SPAN&gt;int&lt;/SPAN&gt;(&lt;SPAN&gt;str&lt;/SPAN&gt;(datetime.strptime(metricList[&lt;SPAN&gt;0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;/SPAN&gt;&lt;SPAN&gt;'%Y-%m-%d-%H:%M'&lt;/SPAN&gt;).timestamp()).replace(&lt;SPAN&gt;"."&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;""&lt;/SPAN&gt;)[&lt;SPAN&gt;0&lt;/SPAN&gt;:&lt;SPAN&gt;10&lt;/SPAN&gt;]+&lt;SPAN&gt;'000'&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"attachRules"&lt;/SPAN&gt;: {&lt;BR /&gt;                            &lt;SPAN&gt;"entityIds"&lt;/SPAN&gt;: [&lt;BR /&gt;                                &lt;SPAN&gt;"CUSTOM_DEVICE-879884799A9C475A"&lt;BR /&gt;&lt;/SPAN&gt;                            ]}&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"customProperties"&lt;/SPAN&gt;: {&lt;BR /&gt;                                &lt;SPAN&gt;"Proposta"&lt;/SPAN&gt;:&lt;SPAN&gt;str&lt;/SPAN&gt;(metricList[&lt;SPAN&gt;1&lt;/SPAN&gt;])&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                                &lt;SPAN&gt;"Mensagem de Erro"&lt;/SPAN&gt;: metricList[&lt;SPAN&gt;2&lt;/SPAN&gt;]&lt;BR /&gt;                            }&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"source"&lt;/SPAN&gt;: &lt;SPAN&gt;"PropostaMF"&lt;/SPAN&gt;&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"annotationType"&lt;/SPAN&gt;: &lt;SPAN&gt;str&lt;/SPAN&gt;(metricList[&lt;SPAN&gt;3&lt;/SPAN&gt;])&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;                            &lt;SPAN&gt;"annotationDescription"&lt;/SPAN&gt;: metricList[&lt;SPAN&gt;4&lt;/SPAN&gt;]&lt;BR /&gt;                            }&lt;BR /&gt;                        eventValidation(payload)&lt;BR /&gt;            &lt;SPAN&gt;for &lt;/SPAN&gt;retcode&lt;SPAN&gt;, &lt;/SPAN&gt;datails &lt;SPAN&gt;in &lt;/SPAN&gt;df.groupby([&lt;SPAN&gt;'CD_ERRO_PROC'&lt;/SPAN&gt;]):&lt;BR /&gt;                &lt;SPAN&gt;for &lt;/SPAN&gt;motor &lt;SPAN&gt;in &lt;/SPAN&gt;motor_list:&lt;BR /&gt;                    filter_group = (df[&lt;SPAN&gt;'CD_MOTO_PROC'&lt;/SPAN&gt;]==motor) &amp;amp; (df[&lt;SPAN&gt;'CD_ERRO_PROC'&lt;/SPAN&gt;]==retcode)&lt;BR /&gt;                    cd_situ_prop_flux(motor&lt;SPAN&gt;,&lt;/SPAN&gt;filter_group&lt;SPAN&gt;,&lt;/SPAN&gt;retcode)&lt;BR /&gt;        &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;            logging.info(&lt;SPAN&gt;'Nao possui arquivos a serem lidos'&lt;/SPAN&gt;)&lt;BR /&gt;        delete_oldfiles(&lt;SPAN&gt;str&lt;/SPAN&gt;(List_last_files[&lt;SPAN&gt;0&lt;/SPAN&gt;])) &lt;SPAN&gt;### Deletando arquivos antigos&lt;BR /&gt;&lt;/SPAN&gt;        logging.info(&lt;SPAN&gt;'Processo concluido com sucesso!'&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;except&lt;/SPAN&gt;:&lt;BR /&gt;        logging.exception(&lt;SPAN&gt;"Unexpected error: %s"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;sys.exc_info()[&lt;SPAN&gt;0&lt;/SPAN&gt;])&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if &lt;/SPAN&gt;__name__ == &lt;SPAN&gt;"__main__"&lt;/SPAN&gt;:&lt;BR /&gt;    main()    &lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know we must create an extension metric, like: "ext:&amp;nbsp;&lt;SPAN&gt;motors_dmps_response_time_inc". However, I'm not sure how to do that.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;I would like to know how to do this.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 17 May 2023 10:05:25 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/181997#M2080</guid>
      <dc:creator>Gustavo_Godinho</dc:creator>
      <dc:date>2023-05-17T10:05:25Z</dc:date>
    </item>
    <item>
      <title>Re: Extension Metric</title>
      <link>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/182525#M2091</link>
      <description>&lt;P&gt;Hi, this is the API to create 1.0 metrics in Dynatrace.&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v1/custom-metrics/put-custom-metric" target="_blank"&gt;https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v1/custom-metrics/put-custom-metric&lt;/A&gt;&lt;/P&gt;&lt;P&gt;I'd recommend you to move over to 2.0 though with the ingest metric API as it doesn't require declaring it first.&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v2/post-ingest-metrics" target="_blank"&gt;https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v2/post-ingest-metrics&lt;/A&gt;&lt;/P&gt;&lt;P&gt;It'd require you to use generic entities though instead of custom devices, so it'd be a bigger rewrite.&lt;/P&gt;&lt;P&gt;Mike&lt;/P&gt;</description>
      <pubDate>Tue, 15 Mar 2022 15:22:58 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/182525#M2091</guid>
      <dc:creator>Mike_L</dc:creator>
      <dc:date>2022-03-15T15:22:58Z</dc:date>
    </item>
    <item>
      <title>Re: Extension Metric</title>
      <link>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/184809#M2155</link>
      <description>&lt;P&gt;This is exactly what I needed. However, I want to know how I define the dimesion in payload. I tried to fill it out, but I ended up getting the following error:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;"Erro ao incluir o payload: {'error': {'code': 400, 'message': 'Constraints violated.', 'constraintViolations': [{'path': 'series[0].dimensions', 'message': "Dimensions don't match dimensions specified in configuration. Allowed extra dimensions from the configuration are: Inclusao_Proposta", 'parameterLocation': 'PAYLOAD_BODY', 'location': None}]}}, Json: {"displayName": "Inclus\u00e3o Proposta", "group": "TZ - Administracao de Propostas Santander Financiamentos", "type": "DMPS", "properties": {"u_name_abbreviation": "TZ", "path": "D:\\DynatraceExtension", "exe": "readCSV.py", "ServerExtension": "n2431237"}, "configUrl": "&lt;A href="https://confluence.santanderbr.corp/pages/viewpage.action?pageId=409685379" target="_blank"&gt;https://confluence.santanderbr.corp/pages/viewpage.action?pageId=409685379&lt;/A&gt;", "tags": ["TZ"], "series": [{"timeseriesId":"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So, could you tell me what I should fill it out with, based on my code above?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Thu, 14 Apr 2022 12:01:30 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/184809#M2155</guid>
      <dc:creator>Gustavo_Godinho</dc:creator>
      <dc:date>2022-04-14T12:01:30Z</dc:date>
    </item>
    <item>
      <title>Re: Extension Metric</title>
      <link>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/185704#M2176</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.dynatrace.com/t5/user/viewprofilepage/user-id/48359"&gt;@Gustavo_Godinho&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;you need to make sure the types list in the custom metric has also the same type as the custom device you try pushing your metric to. You may need to &lt;A href="https://www.dynatrace.com/support/help/shortlink/api-custom-metrics-put#request-body-objects" target="_self"&gt;update the custom metric&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Also in order to push metrics to custom devices you will need to do through with the &lt;A href="https://www.dynatrace.com/support/help/dynatrace-api/environment-api/topology-and-smartscape/custom-device-api/report-custom-device-metric-via-rest-api#:~:text=The%20EntityTimeseriesData%20object" target="_self"&gt;timeseries field&lt;/A&gt; on the custom device, basically &lt;EM&gt;refreshing&lt;/EM&gt; the custom device as well.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;P&gt;Best,&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;</description>
      <pubDate>Fri, 29 Apr 2022 08:10:24 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/Extensions/Extension-metric-error/m-p/185704#M2176</guid>
      <dc:creator>mark_bley</dc:creator>
      <dc:date>2022-04-29T08:10:24Z</dc:date>
    </item>
  </channel>
</rss>

