diff --git a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/build.toml b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/build.toml index 35b1ec3..a93d82b 100644 --- a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/build.toml +++ b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/build.toml @@ -5,7 +5,7 @@ codeuri = "/Users/nico/Documents/GitHub/ThingsBoard/EKKO Reports/thunderbirdfs-d runtime = "python3.9" architecture = "x86_64" handler = "thunderbirdfsreport.lambda_handler" -source_hash = "93b500c168f513a7a25cab048f85e186f10d9e9cd5e16384ba4c71c272648df0" +source_hash = "88b16cd7e5de563582281a46aab2ae8c8f286034857022c8856d0366eb522475" manifest_hash = "" packagetype = "Zip" functions = ["ThunderbirdFSReport"] diff --git a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/ACW Daily Report Template.xlsx b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/ACW Daily Report Template.xlsx index 9e65f8d..27400ee 100644 Binary files a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/ACW Daily Report Template.xlsx and b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/ACW Daily Report Template.xlsx differ diff --git a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/test_thunderbirdfsreport.py b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/test_thunderbirdfsreport.py new file mode 100644 index 0000000..af2e8b2 --- /dev/null +++ b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/test_thunderbirdfsreport.py @@ -0,0 +1,31 @@ +# thunderbirdfsreport/tests/test_thunderbirdfsreport.py (24-30) + +import unittest +from unittest.mock import MagicMock +from thunderbirdfsreport import getDevices +from tb_rest_client.rest_client_ce import Customer, CustomerId, PageDataCustomer, PageDataDevice +class TestGetDevices(unittest.TestCase): + + def setUp(self): + self.rest_client = MagicMock() + customer1Id = CustomerId(id="cid1",entity_type="CUSTOMER") + customer2Id = CustomerId(id="cid2",entity_type="CUSTOMER") + self.customer1 = Customer(id=customer1Id, name='customer1', title="customer1") + self.target_customer = Customer(id=customer2Id, name='target_customer', title="customer2") + self.customers = PageDataCustomer(data=[self.customer1, self.target_customer]) + + def test_get_devices_found_customer(self): + self.rest_client.get_customer_devices.return_value = {'devices': []} + devices = getDevices(self.rest_client, self.customers, 'target_customer') + self.assertEqual(devices, {"devices": []}) + self.rest_client.get_customer_devices.assert_called_once_with(customer_id='cid2', page_size=500, page=0) + + def test_get_devices_not_found_customer(self): + self.rest_client.get_customer_devices.return_value = {'devices': []} + devices = getDevices(self.rest_client, self.customers, 'non_target_customer') + self.assertEqual(devices, PageDataDevice()) + self.assertFalse(self.rest_client.get_customer_devices.called) + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/thunderbirdfsreport.py b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/thunderbirdfsreport.py index ce5b8b6..dabc3fc 100644 --- a/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/thunderbirdfsreport.py +++ b/EKKO Reports/thunderbirdfs-daily-report/.aws-sam/cache/67ab70ce-dfbc-432e-90ee-b104415061ba/thunderbirdfsreport.py @@ -1,4 +1,3 @@ -import json import logging, boto3, pytz, os, shutil from openpyxl.utils.datetime import to_excel import pandas as pd @@ -23,11 +22,18 @@ url = "https://www.enxlekkocloud.com" #"https://hp.henrypump.cloud" def getDevices(rest_client, customers,target_customer, page=0, pageSize=500): - for c in customers.data: - if c.name == target_customer: - cid = c.id.id - devices = rest_client.get_customer_devices(customer_id=cid, page_size=pageSize, page=page) - return devices #.to_dict() + try: + cid = "" + for c in customers.data: + if c.name == target_customer: + cid = c.id.id + devices = rest_client.get_customer_devices(customer_id=cid, page_size=pageSize, page=page) + return devices #.to_dict() + return PageDataDevice() + except Exception as e: + logging.error(f"Error occured in getDevices: {e}") + return PageDataDevice() + def getDeviceKeys(rest_client, devices,target_device): @@ -94,15 +100,17 @@ def getThingsBoardData(url, username, password, targetCustomer, timeRequest): customers = rest_client.get_customers(page_size="500", page="0") devices = getDevices(rest_client=rest_client, customers=customers, target_customer=targetCustomer) telemetry = {} - for d in devices.data: - #print(d.name) - device, keys, err = getDeviceKeys(rest_client=rest_client, devices=devices, target_device=d.name) - start_ts, end_ts = getTime(timeRequest) - #print(keys) - telemetry[d.name] = getTelemetry(rest_client=rest_client, device=device, keys=','.join(keys), start_ts=start_ts, end_ts=end_ts, limit=25000) - latest = getLatestTelemetry(rest_client=rest_client, device=device, keys="manual_well,manual_tfs_lead,manual_copa_lead,manual_job_name") - telemetry[d.name].update(latest) - return telemetry + if devices.data: + for d in devices.data: + #print(d.name) + device, keys, err = getDeviceKeys(rest_client=rest_client, devices=devices, target_device=d.name) + start_ts, end_ts = getTime(timeRequest) + #print(keys) + telemetry[d.name] = getTelemetry(rest_client=rest_client, device=device, keys=','.join(keys), start_ts=start_ts, end_ts=end_ts, limit=25000) + latest = getLatestTelemetry(rest_client=rest_client, device=device, keys="manual_well,manual_tfs_lead,manual_copa_lead,manual_job_name") + telemetry[d.name].update(latest) + return telemetry + return {} except ApiException as e: logging.error(e) return False @@ -119,7 +127,7 @@ def getMaxWidth(): "Inlet Ph Temp": "INLET PH TEMP", "Ait 102b H2s": "INLET H₂S", "At 109b H2s": "OUTLET H₂S", - "At 109c Oil In Water": "OUTLET OIL IN WATER", + "Coriolis Density": "OUTLET OIL IN WATER", "Ait 102a Turbitity": "INLET TURBIDITY", "At 109a Turbidity": "OUTLET TURBIDITY", "At 109e Orp": "OUTLET ORP" @@ -149,7 +157,7 @@ def formatColumnName(telemetryName): "Ait 102a Turbitity": "INLET TURBIDITY", "At 109a Turbidity": "OUTLET TURBIDITY", "At 109e Orp": "OUTLET ORP", - "Ait 102d Oil In Water": "INLET DENSITY", + "Coriolis Density": "INLET DENSITY", "Fit 106b Flow Rate": "SKIM FLOW RATE", "Manual Sample Time": "manual_sample_time", "Outlet Ph": "Outlet Ph" @@ -309,7 +317,7 @@ def lambda_handler(event, context): ) reportsheet = writer.book.worksheets[0] - keys = ['ait_102a_turbitity','ait_102b_h2s', 'at_109a_turbidity', 'at_109b_h2s', 'at_109c_oil_in_water', 'at_109e_orp', 'fit_100_flow_rate', 'fit_109b_flow_rate', 'lit_116b_level', 'lit_116a_level', 'outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp', 'ait_102d_oil_in_water','outlet_ph','fit_106b_flow_rate'] + keys = ['ait_102a_turbitity','ait_102b_h2s', 'at_109a_turbidity', 'at_109b_h2s', 'at_109c_oil_in_water', 'at_109e_orp', 'fit_100_flow_rate', 'fit_109b_flow_rate', 'lit_116b_level', 'lit_116a_level', 'outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp', 'coriolis_density','outlet_ph','fit_106b_flow_rate'] manual_keys = ['manual_bag_filter_changes', 'manual_cartridge_filter_changes', 'manual_clean_water_sold_per_job', 'manual_coagulant_on_hand', 'manual_diverted_water_time', 'manual_equipment_description', 'manual_equipment_time', 'manual_h202_on_hand', 'manual_issues_concerns', 'manual_next_pigging_scheduled', 'manual_skim_oil_discharged_per_job', 'manual_standby_time', 'manual_unit_uptime', 'manual_upright_tank_issues', 'manual_vac_truck_batches', 'manual_water_events', 'manual_water_events_time', 'manual_water_to_tanks_time',"manual_well", "manual_tfs_lead", "manual_copa_lead", "manual_job_name", "manual_summary", "manual_hse_spills", "manual_quality_issues"] sample_keys = ['manual_sample_datapoint', 'manual_sample_lab', 'manual_sample_location', 'manual_sample_time', 'manual_sample_value'] #Create a Sheet for each Device diff --git a/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/ACW Daily Report Template.xlsx b/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/ACW Daily Report Template.xlsx index 9e65f8d..27400ee 100644 Binary files a/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/ACW Daily Report Template.xlsx and b/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/ACW Daily Report Template.xlsx differ diff --git a/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/thunderbirdfsreport.py b/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/thunderbirdfsreport.py index d396156..dabc3fc 100644 --- a/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/thunderbirdfsreport.py +++ b/EKKO Reports/thunderbirdfs-daily-report/thunderbirdfsreport/thunderbirdfsreport.py @@ -127,7 +127,7 @@ def getMaxWidth(): "Inlet Ph Temp": "INLET PH TEMP", "Ait 102b H2s": "INLET H₂S", "At 109b H2s": "OUTLET H₂S", - "At 109c Oil In Water": "OUTLET OIL IN WATER", + "Coriolis Density": "OUTLET OIL IN WATER", "Ait 102a Turbitity": "INLET TURBIDITY", "At 109a Turbidity": "OUTLET TURBIDITY", "At 109e Orp": "OUTLET ORP" @@ -157,7 +157,7 @@ def formatColumnName(telemetryName): "Ait 102a Turbitity": "INLET TURBIDITY", "At 109a Turbidity": "OUTLET TURBIDITY", "At 109e Orp": "OUTLET ORP", - "Ait 102d Oil In Water": "INLET DENSITY", + "Coriolis Density": "INLET DENSITY", "Fit 106b Flow Rate": "SKIM FLOW RATE", "Manual Sample Time": "manual_sample_time", "Outlet Ph": "Outlet Ph" @@ -317,7 +317,7 @@ def lambda_handler(event, context): ) reportsheet = writer.book.worksheets[0] - keys = ['ait_102a_turbitity','ait_102b_h2s', 'at_109a_turbidity', 'at_109b_h2s', 'at_109c_oil_in_water', 'at_109e_orp', 'fit_100_flow_rate', 'fit_109b_flow_rate', 'lit_116b_level', 'lit_116a_level', 'outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp', 'ait_102d_oil_in_water','outlet_ph','fit_106b_flow_rate'] + keys = ['ait_102a_turbitity','ait_102b_h2s', 'at_109a_turbidity', 'at_109b_h2s', 'at_109c_oil_in_water', 'at_109e_orp', 'fit_100_flow_rate', 'fit_109b_flow_rate', 'lit_116b_level', 'lit_116a_level', 'outlet_turbidity_temp', 'outlet_orp_temp', 'inlet_turbidity_temp', 'inlet_ph_temp', 'coriolis_density','outlet_ph','fit_106b_flow_rate'] manual_keys = ['manual_bag_filter_changes', 'manual_cartridge_filter_changes', 'manual_clean_water_sold_per_job', 'manual_coagulant_on_hand', 'manual_diverted_water_time', 'manual_equipment_description', 'manual_equipment_time', 'manual_h202_on_hand', 'manual_issues_concerns', 'manual_next_pigging_scheduled', 'manual_skim_oil_discharged_per_job', 'manual_standby_time', 'manual_unit_uptime', 'manual_upright_tank_issues', 'manual_vac_truck_batches', 'manual_water_events', 'manual_water_events_time', 'manual_water_to_tanks_time',"manual_well", "manual_tfs_lead", "manual_copa_lead", "manual_job_name", "manual_summary", "manual_hse_spills", "manual_quality_issues"] sample_keys = ['manual_sample_datapoint', 'manual_sample_lab', 'manual_sample_location', 'manual_sample_time', 'manual_sample_value'] #Create a Sheet for each Device