diff --git a/extension/src/main/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintData.java b/extension/src/main/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintData.java index da2a1ed..d436f3e 100644 --- a/extension/src/main/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintData.java +++ b/extension/src/main/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintData.java @@ -54,7 +54,7 @@ void init() { this.microarchitecture = InstanceConfiguration.getMicroarchitecture(); this.gridEmissionsFactor = initializeGridEmissionFactor(InstanceConfiguration.getCloudProviderRegion()); cloudInstanceDetails = initializeCloudInstanceDetails(InstanceConfiguration.getCloudProviderInstanceType()); - this.pueValue = initializePueValue(); + this.pueValue = initializePueValue(InstanceConfiguration.getCloudProviderRegion()); } public Double getGridEmissionsFactor() { @@ -271,14 +271,17 @@ public Double getTotalEmbodiedEmissionsForInstanceType(final String instanceType return 0.0; } - private Double initializePueValue() { + private Double initializePueValue(final String region) { double returnValue = 0.0; if (Constants.RETIT_EMISSIONS_CLOUD_PROVIDER_CONFIGURATION_PROPERTY_VALUE_AWS.equalsIgnoreCase(InstanceConfiguration.getCloudProvider())) { - returnValue = CloudCarbonFootprintCoefficients.AWS_PUE; + double pue = getDoubleValueFromCSVForRegionOrInstance("/pue/pue-aws.csv", 1, region, 3); + returnValue = (pue == 0.0) ? CloudCarbonFootprintCoefficients.AWS_PUE : pue; } else if (Constants.RETIT_EMISSIONS_CLOUD_PROVIDER_CONFIGURATION_PROPERTY_VALUE_AZURE.equalsIgnoreCase(InstanceConfiguration.getCloudProvider())) { - returnValue = CloudCarbonFootprintCoefficients.AZURE_PUE; + double pue = getDoubleValueFromCSVForRegionOrInstance("/pue/pue-azure.csv", 3, region, 1); + returnValue = (pue == 0.0) ? CloudCarbonFootprintCoefficients.AZURE_PUE : pue; } else if (Constants.RETIT_EMISSIONS_CLOUD_PROVIDER_CONFIGURATION_PROPERTY_VALUE_GCP.equalsIgnoreCase(InstanceConfiguration.getCloudProvider())) { - returnValue = CloudCarbonFootprintCoefficients.GCP_PUE; + double pue = getDoubleValueFromCSVForRegionOrInstance("/pue/pue-gcp.csv", 3, region, 1); + returnValue = (pue == 0.0) ? CloudCarbonFootprintCoefficients.GCP_PUE : pue; } return returnValue; } diff --git a/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-aws.csv b/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-aws.csv index ca746fc..c9b55e2 100644 --- a/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-aws.csv +++ b/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-aws.csv @@ -5,22 +5,22 @@ us-west-1,United States,WECC,0.000350861,EPA us-west-2,United States,WECC,0.000350861,EPA us-gov-east-1,United States,SERC,0.000415755,EPA us-gov-west-1,United States,WECC,0.000350861,EPA -af-south-1,South Africa,,0.000928,carbonfootprint.com -ap-east-1,Hong Kong,,0.00081,carbonfootprint.com -ap-south-1,India,,0.000708,carbonfootprint.com -ap-northeast-3,Japan,,0.000506,carbonfootprint.com -ap-northeast-2,South Korea,,0.0005,carbonfootprint.com -ap-southeast-1,Singapore,,0.0004085,EMA Singapore -ap-southeast-2,Australia,,0.00079,carbonfootprint.com -ap-northeast-1,Japan,,0.000506,carbonfootprint.com -ca-central-1,Canada,,0.00013,carbonfootprint.com -cn-north-1,China,,0.000555,carbonfootprint.com -cn-northwest-1,China,,0.000555,carbonfootprint.com -eu-central-1,Germany,,0.000338,EEA -eu-west-1,Ireland,,0.000316,EEA -eu-west-2,England,,0.000228,EEA -eu-south-1,Italy,,0.000233,EEA -eu-west-3,France,,0.000052,EEA -eu-north-1,Sweden,,0.000008,EEA -me-south-1,Bahrain,,0.000732,carbonfootprint.com -sa-east-1,Brazil,,0.000074,carbonfootprint.com \ No newline at end of file +af-south-1,South Africa,,0.00077347,carbondi.com +ap-east-1,Hong Kong,,0.00069294,carbondi.com +ap-south-1,India,,0.00093355,carbondi.com +ap-northeast-3,Japan,,0.00045773,carbondi.com +ap-northeast-2,South Korea,,0.00048755,carbondi.com +ap-southeast-1,Singapore,,0.00050249,carbondi.com +ap-southeast-2,Australia,,0.00059512,carbondi.com +ap-northeast-1,Japan,,0.00045773,carbondi.com +ca-central-1,Canada,,0.00011600,carbondi.com +cn-north-1,China,,0.00066080,carbondi.com +cn-northwest-1,China,,0.00066080,carbondi.com +eu-central-1,Germany,,0.00037995,carbondi.com +eu-west-1,Ireland,,0.00031413,carbondi.com +eu-west-2,England,,0.00020705,carbondi.com +eu-south-1,Italy,,0.00031432,carbondi.com +eu-west-3,France,,0.00007055,carbondi.com +eu-north-1,Sweden,,0.00001518,carbondi.com +me-south-1,Bahrain,,0.00051086,carbondi.com +sa-east-1,Brazil,,0.00007410,carbondi.com \ No newline at end of file diff --git a/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-azure.csv b/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-azure.csv index e36a211..d4248b1 100644 --- a/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-azure.csv +++ b/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-azure.csv @@ -9,17 +9,17 @@ West Central US,Wyoming,WECC,0.000350861,EPA West US,California,WECC,0.000350861,EPA West US 2,Washington,WECC,0.000350861,EPA West US 3,Arizona,WECC,0.000350861,EPA -East Asia,Hong Kong,,0.00081,carbonfootprint.com -Southeast Asia,Singapore,,0.0004085,EMA Singapore -North Europe,Ireland,,0.000316,EEA -West Europe,Netherlands,,0.00039,EEA -Central India,Pune,,0.000708,carbonfootprint.com -South India,Chennai,,0.000708,carbonfootprint.com -West India,Mumbai,,0.000708,carbonfootprint.com -UK South,London,,0.000228,EEA -UK West,Cardiff,,0.000228,EEA -France Central,Paris,,0.000067,EEA -Finland Central,Helsinki,,0.00077,EEA, -Germany West Central,Frankfurt,,0.00402,EEA -Belgium Central,Brussels,,0.000154,EEA -Sweden Central,Gavle,,0.000009,EEA \ No newline at end of file +East Asia,Hong Kong,,0.00069294,carbondi.com +Southeast Asia,Singapore,,0.00050249,carbondi.com +North Europe,Ireland,,0.00031413,carbondi.com +West Europe,Netherlands,,0.00030901,carbondi.com +Central India,Pune,,0.00093355,carbondi.com +South India,Chennai,,0.00093355,carbondi.com +West India,Mumbai,,0.00093355,carbondi.com +UK South,London,,0.00020705,carbondi.com +UK West,Cardiff,,0.00020705,carbondi.com +France Central,Paris,,0.00007055,carbondi.com +Finland Central,Helsinki,,0.00009501,carbondi.com, +Germany West Central,Frankfurt,,0.00037995,carbondi.com +Belgium Central,Brussels,,0.00012525,carbondi.com +Sweden Central,Gavle,,0.00001518,carbondi.com \ No newline at end of file diff --git a/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-gcp.csv b/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-gcp.csv index 57c01b3..370ca9b 100644 --- a/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-gcp.csv +++ b/extension/src/main/resources/ccf-coefficients/grid-emissions/grid-emissions-factors-gcp.csv @@ -6,20 +6,20 @@ us-west1,Oregon,0.000117,Google us-west2,Los Angeles,0.000248,Google us-west3,Salt Lake City,0.000561,Google us-west4,Las Vegas,0.000491,Google -asia-east1,Taiwan,0.000541,Google -asia-east2,Hong Kong,0.000626,Google -asia-northeast1,Japan,0.000524,Google -asia-northeast2,Japan,0.000524,Google -asia-northeast3,South Korea,0.00054,Google -asia-south1,India,0.000723,Google -asia-southeast1,Singapore,0.000493,Google -asia-southeast2,Indonesia,0.000772,Google -australia-southeast1,Australia,0.000725,Google -europe-north1,Finland,0.000181,Google -europe-west1,Belgium,0.000196,Google -europe-west2,England,0.000257,Google -europe-west3,Germany,0.000319,Google -europe-west4,Netherlands,0.000474,Google -europe-west6,Switzerland,0.000029,Google -northamerica-northeast1,Canada,0.000143,Google -southamerica-east1,Brazil,0.000109,Google \ No newline at end of file +asia-east1,Taiwan,0.00063602,carbondi.com +asia-east2,Hong Kong,0.00069294,carbondi.com +asia-northeast1,Japan,0.00045773,carbondi.com +asia-northeast2,Japan,0.00045773,carbondi.com +asia-northeast3,South Korea,0.00048755,carbondi.com +asia-south1,India,0.00093355,carbondi.com +asia-southeast1,Singapore,0.00050249,carbondi.com +asia-southeast2,Indonesia,0.00070711,carbondi.com +australia-southeast1,Australia,0.00059512,carbondi.com +europe-north1,Finland,0.00009501,carbondi.com +europe-west1,Belgium,0.00012525,carbondi.com +europe-west2,England,0.00020705,carbondi.com +europe-west3,Germany,0.00037995,carbondi.com +europe-west4,Netherlands,0.00030901,carbondi.com +europe-west6,Switzerland,0.00002369,carbondi.com +northamerica-northeast1,Canada,0.00011600,carbondi.com +southamerica-east1,Brazil,0.00007410,carbondi.com \ No newline at end of file diff --git a/extension/src/main/resources/pue/pue-aws.csv b/extension/src/main/resources/pue/pue-aws.csv new file mode 100644 index 0000000..7b5a345 --- /dev/null +++ b/extension/src/main/resources/pue/pue-aws.csv @@ -0,0 +1,26 @@ +Geography,Region,Year,PUE +GLOBAL,GLOBAL,2023,1.15 +AMER,AMER,2023,1.14 +EMEA,EMEA,2023,1.12 +APAC,APAC,2023,1.28 +Europe (Stockholm),eu-north-1,2023,1.12 +Middle East (Bahrain),me-south-1,2023,1.32 +Asia-Pacific (Mumbai),ap-south-1,2023,1.44 +Asia-Pacific (Jakarta),ap-southeast-3,2023,1.35 +U.S. East (Ohio),us-east-2,2023,1.12 +Africa (Cape Town),af-south-1,2023,1.24 +Europe (Ireland),eu-west-1,2023,1.1 +Middle East (UAE),me-central-1,2023,1.36 +Europe (Frankfurt),eu-central-1,2023,1.33 +South America (Sao Paulo),sa-east-1,2023,1.18 +Asia-Pacific (Hyderabad),ap-south-2,2023,1.5 +U.S. East (Northern Virginia),us-east-1,2023,1.15 +Asia-Pacific (Melbourne),ap-southeast-4,2023,1.08 +Asia-Pacific (Tokyo),ap-northeast-1,2023,1.32 +U.S. West (Oregon),us-west-2,2023,1.13 +U.S. West (Northern California),us-west-1,2023,1.17 +Asia-Pacific (Singapore),ap-southeast-1,2023,1.3 +Asia-Pacific (Sydney),ap-southeast-2,2023,1.15 +Canada (Central),ca-central-1,2023,1.22 +Europe (Spain),eu-south-2,2023,1.11 +China (Ningxia),cn-northwest-1,2023,1.26 diff --git a/extension/src/main/resources/pue/pue-azure.csv b/extension/src/main/resources/pue/pue-azure.csv new file mode 100644 index 0000000..8c5995b --- /dev/null +++ b/extension/src/main/resources/pue/pue-azure.csv @@ -0,0 +1,13 @@ +"Geography","PUE","WUE (L/kWh)","Region" +"Arizona",1.13,1.52,"West US 3" +"Illinois",1.25,0.52,"North Central US" +"Iowa",1.16,0.10,"Central US" +"Texas",1.28,0.24,"South Central US" +"Virginia",1.14,0.18,"East US" +"Washington",1.16,0.70,"West US 2" +"Wyoming",1.12,0.16,"West Central US" +"Singapore",1.30,0.02,"Southeast Asia" +"Ireland",1.18,0.02,"North Europe" +"Netherlands",1.14,0.04,"West Europe" +"Sweden",1.16,0.05,"Sweden Central" +"Poland",1.19,0.44,"Poland Central" diff --git a/extension/src/main/resources/pue/pue-gcp.csv b/extension/src/main/resources/pue/pue-gcp.csv new file mode 100644 index 0000000..4009a71 --- /dev/null +++ b/extension/src/main/resources/pue/pue-gcp.csv @@ -0,0 +1,29 @@ +"Campuses","Quarterly","TrailingTwelveMonth","Region" +"Douglas County, Georgia",1.12,1.09,us-east1 +"Lenoir, North Carolina",1.24,1.13,us-east1 +"Berkeley County, South Carolina",1.13,1.10,us-east1 +"Montgomery County, Tennessee",1.13,1.10,us-east1 +"Jackson County, Alabama",1.13,1.10,us-east1 +"Loudoun County, Virginia",1.11,1.09,us-east4 +"Loudoun County, Virginia (2nd facility)",1.09,1.08,us-east4 +"Central Ohio (Columbus), Ohio",1.05,0.0,us-east5 +"Central Ohio (New Albany), Ohio",1.07,1.08,us-east5 +"Central Ohio (Lancaster), Ohio",1.04,0.0,us-east5 +"Council Bluffs, Iowa",1.13,1.11,us-central1 +"Council Bluffs, Iowa (2nd facility)",1.08,1.07,us-central1 +"Papillion, Nebraska",1.10,1.09,us-central1 +"Mayes County, Oklahoma",1.14,1.11,us-south1 +"Midlothian, Texas",1.13,1.11,us-south1 +"The Dalles, Oregon",1.11,1.10,us-west1 +"The Dalles, Oregon (2nd facility)",1.08,1.07,us-west1 +"Henderson, Nevada",1.11,1.09,us-west4 +"Storey County, Nevada",1.22,1.17,us-west4 +"Dublin, Ireland",1.07,1.08,N/A +"St. Ghislain, Belgium",1.08,1.08,europe-west1 +"Eemshaven, Netherlands",1.08,1.08,europe-west4 +"Fredericia, Denmark",1.07,1.08,N/A +"Hamina, Finland",1.10,1.10,europe-north1 +"Changua County, Taiwan",1.15,1.12,asia-east1 +"Singapore",1.13,1.13,asia-southeast1 +"Singapore (2nd facility)",1.15,1.16,asia-southeast1 +"Quilicura, Chile",1.09,1.10,southamerica-west1 diff --git a/extension/src/test/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintDataTest.java b/extension/src/test/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintDataTest.java index 63d6502..5aa0492 100644 --- a/extension/src/test/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintDataTest.java +++ b/extension/src/test/java/io/retit/opentelemetry/javaagent/extension/emissions/CloudCarbonFootprintDataTest.java @@ -39,7 +39,7 @@ public void testCloudCarbonFootprintDataAWS() { CloudCarbonFootprintData instance = CloudCarbonFootprintData.getConfigInstance(); instance.init(); Assertions.assertNotNull(instance); - Assertions.assertEquals(0.338, instance.getGridEmissionsFactor()); + Assertions.assertEquals(0.37995, instance.getGridEmissionsFactor()); CloudCarbonFootprintInstanceData cloudCarbonFootprintInstanceData = instance.getCloudInstanceDetails(); Assertions.assertNotNull(cloudCarbonFootprintInstanceData); @@ -59,7 +59,7 @@ public void testCloudCarbonFootprintDataGCP() { CloudCarbonFootprintData instance = CloudCarbonFootprintData.getConfigInstance(); instance.init(); Assertions.assertNotNull(instance); - Assertions.assertEquals(0.319, instance.getGridEmissionsFactor()); + Assertions.assertEquals(0.37995, instance.getGridEmissionsFactor()); CloudCarbonFootprintInstanceData cloudCarbonFootprintInstanceData = instance.getCloudInstanceDetails(); Assertions.assertNotNull(cloudCarbonFootprintInstanceData); Assertions.assertEquals(4, cloudCarbonFootprintInstanceData.getInstanceVCpuCount()); @@ -79,7 +79,7 @@ public void testCloudCarbonFootprintDataGCPWithMicroarchitecture() { CloudCarbonFootprintData instance = CloudCarbonFootprintData.getConfigInstance(); instance.init(); Assertions.assertNotNull(instance); - Assertions.assertEquals(0.319, instance.getGridEmissionsFactor()); + Assertions.assertEquals(0.37995, instance.getGridEmissionsFactor()); CloudCarbonFootprintInstanceData cloudCarbonFootprintInstanceData = instance.getCloudInstanceDetails(); Assertions.assertNotNull(cloudCarbonFootprintInstanceData); Assertions.assertEquals(4, cloudCarbonFootprintInstanceData.getInstanceVCpuCount()); @@ -98,7 +98,7 @@ public void testCloudCarbonFootprintDataAzure() { CloudCarbonFootprintData instance = CloudCarbonFootprintData.getConfigInstance(); instance.init(); Assertions.assertNotNull(instance); - Assertions.assertEquals(0.39, instance.getGridEmissionsFactor()); + Assertions.assertEquals(0.30901, instance.getGridEmissionsFactor()); CloudCarbonFootprintInstanceData cloudCarbonFootprintInstanceData = instance.getCloudInstanceDetails(); Assertions.assertNotNull(cloudCarbonFootprintInstanceData); Assertions.assertEquals(1, cloudCarbonFootprintInstanceData.getInstanceVCpuCount()); @@ -118,7 +118,7 @@ public void testCloudCarbonFootprintDataAzureWithMicroarchitecture() { CloudCarbonFootprintData instance = CloudCarbonFootprintData.getConfigInstance(); instance.init(); Assertions.assertNotNull(instance); - Assertions.assertEquals(0.39, instance.getGridEmissionsFactor()); + Assertions.assertEquals(0.30901, instance.getGridEmissionsFactor()); CloudCarbonFootprintInstanceData cloudCarbonFootprintInstanceData = instance.getCloudInstanceDetails(); Assertions.assertNotNull(cloudCarbonFootprintInstanceData); Assertions.assertEquals(0.8, cloudCarbonFootprintInstanceData.getInstanceVCpuCount());