tools/cloud/custom-function-python-histogram/histogram.py (32 lines of code) (raw):

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. import json class Histogram: def __init__(self, min_val, max_val, num_bins): self.min_val = min_val self.max_val = max_val self.num_bins = num_bins self.reset() def calc(self, val): if val <= self.min_val: bin_idx = 0 elif val >= self.max_val: bin_idx = self.num_bins - 1 else: bin_idx = int( (val - self.min_val) * (self.num_bins - 1) / (self.max_val - self.min_val) ) self.bins[bin_idx] += 1 self.sample_count += 1 def reset(self): self.sample_count = 0 self.bins = [0] * self.num_bins hist = Histogram(min_val=-1000, max_val=1000, num_bins=100) def invoke(val): global hist if val is None: # Ignore undefined values return False hist.calc(val) # Collect data every 1000 samples: if hist.sample_count >= 1000: json_result = json.dumps(hist.bins) hist.reset() # Collected data can be returned as the second value in a tuple: return True, {"Vehicle.Histogram": json_result} return False