From 2acd4377e9dcc3dc925a8a79485d6add0472025d Mon Sep 17 00:00:00 2001 From: DanB Date: Fri, 16 May 2014 20:09:00 +0200 Subject: [PATCH] apier/costs.go file --- apier/costs.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 apier/costs.go diff --git a/apier/costs.go b/apier/costs.go new file mode 100644 index 000000000..8eff50cf4 --- /dev/null +++ b/apier/costs.go @@ -0,0 +1,59 @@ +/* +Real-time Charging System for Telecom & ISP environments +Copyright (C) 2012-2014 ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package apier + +import ( + "fmt" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" + "time" +) + +type AttrGetDataCosts struct { + Direction string + Category string + Tenant, Account, Subject string + StartTime time.Time + Usage int64 // the call duration so far (till TimeEnd) +} + +func (apier *ApierV1) GetDataCosts(attrs AttrGetDataCosts, reply *engine.DataCost) error { + usageAsDuration := time.Duration(attrs.Usage) + cd := engine.CallDescriptor{ + Direction: attrs.Direction, + Category: attrs.Category, + Tenant: attrs.Tenant, + Account: attrs.Account, + Subject: attrs.Subject, + TimeStart: attrs.StartTime, + TimeEnd: attrs.StartTime.Add(usageAsDuration), + DurationIndex: usageAsDuration, + TOR: utils.DATA, + } + var cc engine.CallCost + if err := apier.Responder.GetCost(cd, &cc); err != nil { + return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) + } + if dc, err := cc.ToDataCost(); err != nil { + return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) + } else if dc != nil { + *reply = *dc + } + return nil +}