mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
ApierV1.GetLoadHistory implementation, console load_history command
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
66
console/load_history.go
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user