diff --git a/apier/v1/smv1.go b/apier/v1/smv1.go new file mode 100644 index 000000000..0d3c2c7f8 --- /dev/null +++ b/apier/v1/smv1.go @@ -0,0 +1,45 @@ +/* +Real-time Charging System for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can Storagetribute 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 WITH*out 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 v1 + +import ( + "github.com/cgrates/cgrates/sessionmanager" + "github.com/cgrates/cgrates/utils" +) + +// Interact with SessionManager +type SessionManagerV1 struct { + SMs []sessionmanager.SessionManager // List of session managers since we support having more than one active session manager running on one host +} + +func (self *SessionManagerV1) ActiveSessionMangers(ignored string, reply *[]sessionmanager.SessionManager) error { + if len(self.SMs) == 0 { + return utils.ErrNotFound + } + *reply = self.SMs + return nil +} + +func (self *SessionManagerV1) ActiveSessions(attrs utils.AttrGetSMASessions, reply *[]*sessionmanager.Session) error { + if attrs.SessionManagerIndex > len(self.SMs)-1 { + return utils.ErrNotFound + } + *reply = self.SMs[attrs.SessionManagerIndex].Sessions() + return nil +} diff --git a/console/active_sessions.go b/console/active_sessions.go new file mode 100644 index 000000000..0bbc9cb74 --- /dev/null +++ b/console/active_sessions.go @@ -0,0 +1,65 @@ +/* +Rating system designed to be used in VoIP Carriers World +Copyright (C) 2012-2015 ITsysCOM + +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 console + +import ( + "github.com/cgrates/cgrates/sessionmanager" + "github.com/cgrates/cgrates/utils" +) + +func init() { + c := &CmdActiveSessions{ + name: "active_sessions", + rpcMethod: "SessionManagerV1.ActiveSessions", + } + commands[c.Name()] = c + c.CommandExecuter = &CommandExecuter{c} +} + +// Commander implementation +type CmdActiveSessions struct { + name string + rpcMethod string + rpcParams *utils.AttrGetSMASessions + *CommandExecuter +} + +func (self *CmdActiveSessions) Name() string { + return self.name +} + +func (self *CmdActiveSessions) RpcMethod() string { + return self.rpcMethod +} + +func (self *CmdActiveSessions) RpcParams() interface{} { + if self.rpcParams == nil { + self.rpcParams = &utils.AttrGetSMASessions{} + } + return *self.rpcParams +} + +func (self *CmdActiveSessions) PostprocessRpcParams() error { + return nil +} + +func (self *CmdActiveSessions) RpcResult() interface{} { + var sessions *[]*sessionmanager.Session + return &sessions +}