-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate.noponmon.pl
More file actions
108 lines (91 loc) · 3.02 KB
/
create.noponmon.pl
File metadata and controls
108 lines (91 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#<ACTION> file=>'noponmon.pl',hook=>'new'
#!/usr/bin/perl
# -------------------------- NoDeny --------------------------
# Created by Redmen for NoDeny (https://nodeny.com.ua)
# https://forum.nodeny.com.ua/index.php?action=profile;u=1139
# https://t.me/MrMethod
# ------------------------------------------------------------
# Info: PonMon single OLT kernel handler
# NoDeny: rev. 718
# Update: 2025.11.01
# ------------------------------------------------------------
package kernel;
use strict;
use FindBin;
use lib $FindBin::Bin;
use nod;
my $olt_id;
my $kernel = __PACKAGE__->new(
file_cfg => 'sat.cfg',
default_log => 'ponmon.log',
);
$kernel->{cmd_line_options} = { 'O=i' => \$olt_id };
$kernel->{help_msg} = " -O=numeric : required OLT id\n";
$kernel->Start;
foreach (0..499) {
$kernel->Is_terminated && exit;
my %p = Db->line("SELECT * FROM config ORDER BY time DESC LIMIT 1");
%p or next; # паузу можно не делать т.к. она будет между попытками соединения в модуле Db
$cfg::config = $p{data};
last;
}
$cfg::config or die "Error getting config from DB";
eval "
no strict;
$cfg::config;
use strict;
";
$@ && die "Error config: $@";
my $dir_modkernel = "$cfg::dir_home/kernel";
opendir(my $dh, $dir_modkernel) or die "Cannot open $dir_modkernel";
my %conf_files = map{ $_ => $_ } grep{ /.cfg$/ } readdir($dh);
closedir $dh;
map { delete $conf_files{$_} } grep{ s/^_// } keys %conf_files;
my %configs = ();
while (my ($k, $v) = each %cfg::) {
$k =~ /^k_run_(.+)$/ or next;
defined ${$v} or next;
$configs{$1} = { run => int ${$v} };
}
my $config = $configs{ponmon} or die "$dir_modkernel/ponmon.cfg not found";
$config->{run} = 1;
int $olt_id or die "OLT Id required but undefined in option -O";
$config->{single_olt} = int $olt_id;
$config->{k_ponmon_period} = 1;
%configs = ('ponmon' => $config);
if ($config->{run}) {
my $package = (-e "$dir_modkernel/_ponmon.pm") ? "kernel::_ponmon" : "kernel::ponmon";
my $use_package = "kernel::ponmon";
# Персональный лог для каждого модуля
my $file_log = $use_package;
$file_log =~ s/\W+/_/g;
$file_log .= "_$olt_id";
my $debug = Debug->new(
-file => $cfg::dir_log.$file_log.'.log',
-type => Debug->param(-type ),
-nochain => Debug->param(-nochain),
-only_log => Debug->param(-only_log),
);
$debug->tolog($kernel->{log_prefix}, "Loading $package.pm");
my $err;
{
local $SIG{'__DIE__'} = sub { $err = $@ };
eval "use $package";
}
if ($err) {
$debug->tolog($kernel->{log_prefix}, $err);
die "use $package: ".$err;
}
$debug->tolog($kernel->{log_prefix}, 'Start');
$use_package->start('ponmon', $config);
no strict;
*{$use_package.'::tolog'} = sub{
$debug->tolog($kernel->{log_prefix}, @_);
};
*{$use_package.'::to_slow_log'} = sub{
__PACKAGE__->Error($_[0], $_[1], $debug);
};
use strict;
}
nod::tasks->run;
1;