diff --git a/bunny-cdn-stats/bunny-cdn-stats.py b/bunny-cdn-stats/bunny-cdn-stats.py
--- a/bunny-cdn-stats/bunny-cdn-stats.py
+++ b/bunny-cdn-stats/bunny-cdn-stats.py
#
+#!/usr/bin/env python3
#
+from datetime import datetime
#
+url = "https://api.bunny.net"
#
+measurement = "bunnycdn"
#
+def getStats(start, pullzone, token):
#
+ 'pullZone' : pullzone,
#
+ headers = {"Accept": "application/json",
#
+ r = requests.request("GET", f"{url}/statistics", headers=headers, params=params)
#
+def getPullZones(token):
#
+ headers = {"Accept": "application/json",
#
+ r = requests.request("GET", f"{url}/pullzone", headers=headers)
#
+def process_stats_block(stats_block, measurement, tagset, field_name):
#
+ for key in stats_block:
#
+ # Key is the time, turn it into a timestamp
#
+ ts = datetime.strptime(key, '%Y-%m-%dT%H:%M:%SZ').strftime('%s')
#
+ value = stats_block[key]
#
+ f"{measurement},{tagset} {field_name}={value} {ts}"
#
+def process_stats_blocks(stats, measurement, tagset):
#
+ for key in stats['OriginTrafficChart']:
#
+ # Key is the time, turn it into a timestamp
#
+ ts = datetime.strptime(key, '%Y-%m-%dT%H:%M:%SZ').strftime('%s')
#
+ f"origin_bytes={int(stats['OriginTrafficChart'][key])}i",
#
+ f'status_3xx={int(stats["Error3xxChart"][key])}i',
#
+ f'status_4xx={int(stats["Error4xxChart"][key])}i',
#
+ f'status_5xx={int(stats["Error5xxChart"][key])}i',
#
+ f'origin_response_time={stats["OriginResponseTimeChart"][key]}',
#
+ f'shield_bytes={int(stats["OriginShieldInternalBandwidthUsedChart"][key])}i',
#
+ f'edge_bytes={int(stats["BandwidthUsedChart"][key])}i',
#
+ f'requests_served={int(stats["RequestsServedChart"][key])}i',
#
+ f'RHR={stats["CacheHitRateChart"][key]}'
#
+ f"{measurement},{tagset} {','.join(fields)} {ts}"
#
+midnight = datetime.combine(dt, datetime.min.time()).strftime('%Y-%m-%dT%H:%M:%SZ')
#
+pullzones = getPullZones(token)
#
+for zone in pullzones:
#
+ stats = getStats(midnight,zone['Id'], token)
#
+ num_rules = len(zone['EdgeRules'])
#
+ zone_name = zone['Name']
#
+ tagset = f'edge_zone={zone_name}'
#
+ f'{measurement},{tagset} total_bandwidth_used={stats["TotalBandwidthUsed"]},total_origin_traffic={stats["TotalOriginTraffic"]},mean_origin_response_time={stats["AverageOriginResponseTime"]},total_requests_served={stats["TotalRequestsServed"]},mean_rhr={stats["CacheHitRate"]} {ts}'
#
+ r30xs = process_stats_block(stats["Error3xxChart"], measurement, tagset, "status_3xx")
#
+ r40xs = process_stats_block(stats["Error4xxChart"], measurement, tagset, "status_4xx")
#
+ r50xs = process_stats_block(stats["Error5xxChart"], measurement, tagset, "status_5xx")
#
+ origin_response_times = process_stats_block(stats["OriginResponseTimeChart"], measurement, tagset, "origin_response_time")
#
+ origin_bytes = process_stats_block(stats["OriginTrafficChart"], measurement, tagset, "origin_bytes")
#
+ shield_bytes = process_stats_block(stats["OriginShieldInternalBandwidthUsedChart"], measurement, tagset, "shield_cache_bytes")
#
+ edge_bytes = process_stats_block(stats["BandwidthUsedChart"], measurement, tagset, "edge_bytes")
#
+ requests_served = process_stats_block(stats["RequestsServedChart"], measurement, tagset, "RequestsServedChart")
#
+ rhr = requests_served = process_stats_block(stats["CacheHitRateChart"], measurement, tagset, "RHR")
#
+ lines = lines + r30xs + r40xs + r50xs
#
+ lines = lines + process_stats_blocks(stats, measurement, tagset)
#
+print('\n'.join(lines))