diff --git a/opentrafficshaper/plugins/configmanager.pm b/opentrafficshaper/plugins/configmanager.pm new file mode 100644 index 0000000000000000000000000000000000000000..4f641c399662f4fcd672178ba612a28aa54afca6 --- /dev/null +++ b/opentrafficshaper/plugins/configmanager.pm @@ -0,0 +1,118 @@ +# OpenTrafficShaper configuration manager +# Copyright (C) 2007-2013, AllWorldIT +# +# 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 opentrafficshaper::plugins::configmanager; + +use strict; +use warnings; + + +use POE; + +use opentrafficshaper::logger; + + + +# Exporter stuff +require Exporter; +our (@ISA,@EXPORT,@EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT = qw( +); +@EXPORT_OK = qw( +); + +use constant { + VERSION => '0.0.1', +}; + + +# Plugin info +our $pluginInfo = { + Name => "Config Manager", + Version => VERSION, + + Init => \&init, +}; + + +# Copy of system globals +my $globals; +my $logger; + + +# Initialize plugin +sub init +{ + $globals = shift; + + + # Setup our environment + $logger = $globals->{'logger'}; + + + # This is our configuration processing session + POE::Session->create( + inline_states => { + _start => \&session_init, + tick => \&session_tick, + process_change => \&process_change, + } + ); + + $logger->log(LOG_NOTICE,"[CONFIGMANAGER] OpenTrafficShaper Config Manager v".VERSION." - Copyright (c) 2013, AllWorldIT") +} + + + +# Initialize config manager +sub session_init { + my $kernel = $_[KERNEL]; + + + # Set our alias + $kernel->alias_set("configmanager"); + + # Set delay on config updates + $kernel->delay(tick => 5); +} + + +# Time ticker for processing changes +sub session_tick { + my $kernel = $_[KERNEL]; + + + print STDERR "tick at ", time(), ": users = ". (keys %{$globals->{'users'}}) ."\n"; + + # Reset tick + $kernel->delay(tick => 5); +}; + + +# Read event for server +sub process_change { + my ($kernel, $user) = @_[KERNEL, ARG0]; + + print STDERR "We were asked to process an update for $user->{'Username'}\n"; +} + + + +1; +# vim: ts=4 diff --git a/opentrafficshaperd b/opentrafficshaperd index 46ef652a12a500e3c8f99ce63f5f4111b0418bb0..949f7ddbe70bb67cd4b0280805c02899c6556ee0 100755 --- a/opentrafficshaperd +++ b/opentrafficshaperd @@ -42,35 +42,13 @@ my $globals; my $logger = new opentrafficshaper::logger; - -# Process basically starts here +# +# MAIN +# $logger->log(LOG_NOTICE,"[MAIN] OpenTrafficShaper v".VERSION." - Copyright (c) 2007-2013, AllWorldIT"); parseCfgCmdLine(); init(); - - - -# This is our configuration processing session -# TODO: Current just a trigger -POE::Session->create( - inline_states => { - _start => sub { - $_[KERNEL]->delay(tick => 5); - }, - - tick => sub { - print STDERR "tick at ", time(), ": users = ". (keys %{$globals->{'users'}}) ."\n"; - $_[KERNEL]->delay(tick => 5); - }, - } -); - - - -# -# MAIN -# $logger->log(LOG_NOTICE,"[MAIN] Starting..."); POE::Kernel->run(); exit; @@ -250,6 +228,19 @@ sub init $globals->{'radius'}->{'dictionary'} = $dict; + # Core configuration manager + $logger->log(LOG_INFO,"[MAIN] Initializing config manager..."); + my $res = eval(" + use opentrafficshaper::plugins::configmanager; + plugin_register(\$globals,\"configmanager\",\$opentrafficshaper::plugins::configmanager::pluginInfo); + "); + if ($@ || (defined($res) && $res != 0)) { + $logger->log(LOG_WARN,"[MAIN] Error loading config manager, things WILL BREAK! ($@)"); + } else { + $logger->log(LOG_DEBUG,"[MAIN] Config manager initialized."); + } + + # Load plugins $logger->log(LOG_INFO,"[MAIN] Initializing plugins..."); foreach my $plugin (@{$globals->{'config'}->{'plugin_list'}}) { @@ -259,13 +250,14 @@ sub init plugin_register(\$globals,\"${plugin}\",\$opentrafficshaper::plugins::${plugin}::pluginInfo); "); if ($@ || (defined($res) && $res != 0)) { - $logger->log(LOG_WARN,"[MAIN] Error loading plugin $plugin ($@)"); + $logger->log(LOG_WARN,"[MAIN] Error loading plugin '$plugin' ($@)"); } else { $logger->log(LOG_DEBUG,"[MAIN] Plugin '$plugin' loaded."); } } $logger->log(LOG_INFO,"[MAIN] Plugins initialized."); } + # Register plugin info sub plugin_register { my ($globals,$plugin,$info) = @_; @@ -279,7 +271,7 @@ sub plugin_register { # Set real module name & save $info->{'Plugin'} = $plugin; -# push(@{$logger->{'module_list'}},$info); + push(@{$globals->{'plugins'}},$info); # If we should, init the module if (defined($info->{'Init'})) {