ApierV1.GetLoadHistory implementation, console load_history command

This commit is contained in:
DanB
2015-08-24 11:09:44 +02:00
parent f2386c88f3
commit cd2befb083
4 changed files with 102 additions and 5 deletions

View File

@@ -1186,8 +1186,36 @@ func (self *ApierV1) RemoveRatingProfile(attr AttrRemoveRatingProfile, reply *st
}, "RemoveRatingProfile")
if err != nil {
*reply = err.Error()
return err
return utils.NewErrServerError(err)
}
*reply = utils.OK
return nil
}
func (self *ApierV1) GetLoadHistory(attrs utils.Paginator, reply *[]*engine.LoadInstance) error {
nrItems := -1
offset := 0
if attrs.Offset != nil { // For offset we need full data
offset = *attrs.Offset
} else if attrs.Limit != nil {
nrItems = *attrs.Limit
}
loadHist, err := self.AccountDb.GetLoadHistory(nrItems, true)
if err != nil {
return utils.NewErrServerError(err)
}
if attrs.Offset != nil && attrs.Limit != nil { // Limit back to original
nrItems = *attrs.Limit
}
if len(loadHist) == 0 || len(loadHist) <= offset || nrItems == 0 {
return utils.ErrNotFound
}
if offset != 0 {
nrItems = offset + nrItems
}
if nrItems == -1 || nrItems > len(loadHist) { // So we can use it in indexing bellow
nrItems = len(loadHist)
}
*reply = loadHist[offset:nrItems]
return nil
}

View File

@@ -1,6 +1,6 @@
/*
Rating system designed to be used in VoIP Carriers World
Copyright (C) 2012-2015 ITsysCOM
Real-time Charging System for Telecom & ISP environments
Copyright (C) 2012-2015 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

66
console/load_history.go Normal file
View File

@@ -0,0 +1,66 @@
/*
Real-time Charging System for Telecom & ISP environments
Copyright (C) 2012-2015 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 <http://www.gnu.org/licenses/>
*/
package console
import (
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/utils"
)
func init() {
c := &CmdGetLoadHistory{
name: "load_history",
rpcMethod: "ApierV1.GetLoadHistory",
rpcParams: new(utils.Paginator),
}
commands[c.Name()] = c
c.CommandExecuter = &CommandExecuter{c}
}
// Returns the list of load items from the history, in reverse order
type CmdGetLoadHistory struct {
name string
rpcMethod string
rpcParams *utils.Paginator
*CommandExecuter
}
func (self *CmdGetLoadHistory) Name() string {
return self.name
}
func (self *CmdGetLoadHistory) RpcMethod() string {
return self.rpcMethod
}
func (self *CmdGetLoadHistory) RpcParams(reset bool) interface{} {
if reset || self.rpcParams == nil {
self.rpcParams = new(utils.Paginator)
}
return self.rpcParams
}
func (self *CmdGetLoadHistory) PostprocessRpcParams() error {
return nil
}
func (self *CmdGetLoadHistory) RpcResult() interface{} {
a := make([]*engine.LoadInstance, 0)
return &a
}

View File

@@ -706,13 +706,16 @@ func (rs *RedisStorage) GetLoadHistory(limit int, skipCache bool) ([]*LoadInstan
return nil, err
} else {
items := x.([]*LoadInstance)
if len(items) < limit {
if len(items) < limit || limit == -1 {
return items, nil
}
return items[:limit], nil
}
}
marshaleds, err := rs.db.Lrange(utils.LOADINST_KEY, 0, limit-1)
if limit != -1 {
limit -= -1 // Decrease limit to match redis approach on lrange
}
marshaleds, err := rs.db.Lrange(utils.LOADINST_KEY, 0, limit)
if err != nil {
return nil, err
}