in app/metrics/complete/metrics/complete.go [25:55]
func New(event map[string]interface{}, publishTime time.Time, ackTime time.Time, processingTime time.Duration) (map[string]interface{}, error) {
metrics, err := metrics.New(event, publishTime, ackTime, processingTime)
if err != nil {
return nil, err
}
var float32Zero float32
levelStart, err := avro.GetValue(metrics, "battery_level_start", float32Zero)
if err != nil {
return nil, err
}
chargeRate, err := avro.GetValue(metrics, "avg_charge_rate_kw", float32Zero)
if err != nil {
return nil, err
}
duration, err := avro.GetValue(metrics, "session_duration_hr", float32Zero)
if err != nil {
return nil, err
}
capacity, err := avro.GetValue(metrics, "battery_capacity_kwh", float32Zero)
if err != nil {
return nil, err
}
levelEnd := levelStart + (chargeRate * duration / capacity)
if levelEnd > 1.0 {
levelEnd = 1.0
}
metrics["battery_level_end"] = floatValue(levelEnd)
metrics["charged_total_kwh"] = floatValue((levelEnd - levelStart) * capacity)
return metrics, nil
}