config.pm 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. package eyelib::config;
  2. #
  3. # Copyright (C) Roman Dmitriev, rnd@rajven.ru
  4. #
  5. use utf8;
  6. use open ":encoding(utf8)";
  7. use strict;
  8. use English;
  9. use FindBin '$Bin';
  10. use lib "/opt/Eye/scripts";
  11. use base 'Exporter';
  12. use vars qw(@EXPORT @ISA);
  13. use Config::Tiny;
  14. use File::Basename;
  15. use Data::Dumper;
  16. # Константы флагов уведомлений
  17. use constant {
  18. NOTIFY_NONE => 0, # 0000 - отключено
  19. NOTIFY_CREATE => 1 << 0, # 0001 - создание
  20. NOTIFY_UPDATE => 1 << 1, # 0010 - изменение
  21. NOTIFY_DELETE => 1 << 2, # 0100 - удаление
  22. };
  23. use constant NOTIFY_ALL => NOTIFY_CREATE | NOTIFY_UPDATE | NOTIFY_DELETE; # 0111
  24. @ISA = qw(Exporter);
  25. @EXPORT = qw(
  26. $add_unknown_user
  27. $admin_email
  28. $all_networks
  29. $BEGIN_STR
  30. $connections_history
  31. $cpu_count
  32. $dbh
  33. $DBHOST
  34. $DBNAME
  35. $DBPASS
  36. $DBUSER
  37. $debug
  38. $default_hotspot_ou_id
  39. $default_user_ou_id
  40. $def_timeout
  41. $DHCPD_CONF
  42. $dhcp_pool
  43. $dhcp_server
  44. $dns_server
  45. $domain_auth
  46. $domain_name
  47. $END_STR
  48. $fping
  49. $free_networks
  50. $history
  51. $history_dhcp
  52. $history_log_day
  53. $history_syslog_day
  54. $history_trafstat_day
  55. $HOME_DIR
  56. $HOSTNAME
  57. $hotspot_networks
  58. $KB
  59. $last_refresh_config
  60. $L_DEBUG
  61. $L_ERROR
  62. $L_INFO
  63. $LOG_DIR
  64. $log_enable
  65. $LOG_FILE
  66. $log_file_mode
  67. $log_level
  68. $log_owner_group
  69. $log_owner_user
  70. $L_VERBOSE
  71. $L_WARNING
  72. $MAX_SLEEP
  73. $MIN_SLEEP
  74. $MY_NAME
  75. $office_networks
  76. $org_name
  77. $parallel_process_count
  78. $router_ip
  79. $router_login
  80. $router_password
  81. $router_port
  82. $save_detail
  83. $send_email
  84. $sender_email
  85. $snmp_default_community
  86. $snmp_default_version
  87. $SPID
  88. $tftp_dir
  89. $tftp_server
  90. $urgent_sync
  91. $vpn_networks;
  92. $WAIT_TIME
  93. $WARN_MSG
  94. $W_DEBUG
  95. $W_ERROR
  96. $W_WARN
  97. $W_INFO
  98. $winexe
  99. %config_ref
  100. @FN
  101. @all_network_list
  102. @free_network_list
  103. @hotspot_network_list
  104. @office_network_list
  105. @vpn_network_list
  106. @subnets
  107. %switch_auth
  108. $ignore_hotspot_dhcp_log
  109. $ignore_update_dhcp_event
  110. $update_hostname_from_dhcp
  111. $office_networks
  112. $free_networks
  113. $vpn_networks
  114. $hotspot_networks
  115. $all_networks
  116. %subnets_ref
  117. NOTIFY_NONE
  118. NOTIFY_CREATE
  119. NOTIFY_UPDATE
  120. NOTIFY_DELETE
  121. NOTIFY_ALL
  122. );
  123. BEGIN
  124. {
  125. our $HOME_DIR = '/opt/Eye/scripts';
  126. my $config_file = $HOME_DIR."/cfg/config";
  127. if (! -e "$config_file") { die "Config $config_file not found!"; }
  128. my $Config = Config::Tiny->new;
  129. $Config = Config::Tiny->read($config_file, 'utf8' );
  130. our %config_ref;
  131. ### current script pathname
  132. our @FN=split("/",$0);
  133. ### script pid file name
  134. $config_ref{my_name}=$FN[-1];
  135. $config_ref{pid_dir} ='/run';
  136. #for run as root - use /run dir for pid files
  137. if ($> > 0) {
  138. $config_ref{pid_dir}=$HOME_DIR.'/run';
  139. }
  140. $config_ref{pid_file} = $config_ref{pid_dir}."/".$FN[-1];
  141. $config_ref{log_dir} = $Config->{_}->{log_dir} || $HOME_DIR.'/log';
  142. $config_ref{log_common} = $config_ref{log_dir}."/$FN[-1].log";
  143. $config_ref{dhcpd_conf} = $Config->{_}->{dhcpd_conf} || "/etc/dnsmasq.d";
  144. $config_ref{DBTYPE} = $Config->{_}->{DBTYPE} || 'mysql';
  145. $config_ref{DBHOST} = $Config->{_}->{DBHOST} || $Config->{_}->{DBSERVER} // '127.0.0.1';
  146. $config_ref{DBNAME} = $Config->{_}->{DBNAME} || "stat";
  147. $config_ref{DBUSER} = $Config->{_}->{DBUSER} || "rstat";
  148. $config_ref{DBPASS} = $Config->{_}->{DBPASS} || "rstat";
  149. $config_ref{domain_auth} = $Config->{_}->{domain_auth} || 'Administrator%password';
  150. $config_ref{winexe} = $Config->{_}->{winexe} || '/usr/bin/winexe';
  151. $config_ref{fping} = $Config->{_}->{fping} || '/sbin/fping';
  152. $config_ref{log_owner_user} = $Config->{_}->{user} || 'eye';
  153. $config_ref{log_owner_group}= $Config->{_}->{group} || 'eye';
  154. $config_ref{nagios_dir}=$Config->{_}->{nagios_dir} || '/etc/nagios4';
  155. $config_ref{nagios_dir}=~s/\/$//;
  156. $config_ref{nagios_cmd}=$Config->{_}->{nagios_cmd} || '/var/spool/nagios/cmd/nagios.cmd';
  157. $config_ref{nagios_event_socket}=$Config->{_}->{nagios_event_socket} || '/var/spool/nagios/hoststate.socket';
  158. $config_ref{encryption_key}=$Config->{_}->{encryption_key} || '!!!CHANGE_ME!!!';
  159. $config_ref{encryption_iv}=$Config->{_}->{encryption_iv} || '123456782345';
  160. $config_ref{api_base}=$Config->{_}->{api_base} || 'http://127.0.0.1/api.php';
  161. $config_ref{api_login}=$Config->{_}->{api_login} || 'admin';
  162. $config_ref{api_key}=$Config->{_}->{api_key} || 'c3284d0f94606de1fd2af172aba15bf31';
  163. our $MY_NAME=$FN[-1];
  164. our $SPID=$config_ref{pid_file};
  165. #iptables log
  166. our $LOG_DIR = $config_ref{log_dir};
  167. our $LOG_FILE = "$LOG_DIR/$FN[-1].log";
  168. our $DHCPD_CONF = $Config->{_}->{dhcpd_conf} || "/etc/dnsmasq.d";
  169. our $BEGIN_STR ="================= Start transaction ========================";
  170. our $END_STR ="================= Stop transaction ========================";
  171. our $WARN_MSG ="# DYNAMIC GENERATED FILE\n# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN\n";
  172. ### timeout for wait remove lock before exit
  173. our $WAIT_TIME =600;
  174. our $MIN_SLEEP =5;
  175. our $MAX_SLEEP =30;
  176. ### mail options
  177. our $admin_email;
  178. our $sender_email;
  179. our $send_email = 0;
  180. my $HOSTNAME1=`hostname`;
  181. chomp($HOSTNAME1);
  182. our $HOSTNAME=$HOSTNAME1;
  183. our $debug = 0; # Включить отладочные сообщения
  184. our $log_enable = 1; # Глобальный выключатель логов
  185. our $log_level = 2; # Порог: 0=ERROR, 1=WARNING, 2=INFO, 3=VERBOSE, 255=DEBUG
  186. # === Константы (для обратной совместимости) ===
  187. our $W_ERROR = 0;
  188. our $W_WARN = 1;
  189. our $W_INFO = 2;
  190. our $W_DEBUG = 255;
  191. our $L_ERROR = 0;
  192. our $L_WARNING = 1;
  193. our $L_INFO = 2;
  194. our $L_VERBOSE = 3;
  195. our $L_DEBUG = 255;
  196. our $DBHOST = $config_ref{DBHOST};
  197. our $DBNAME = $config_ref{DBNAME};
  198. our $DBUSER = $config_ref{DBUSER};
  199. our $DBPASS = $config_ref{DBPASS};
  200. our $domain_auth = $config_ref{domain_auth};
  201. our $winexe = $config_ref{winexe};
  202. our $fping = $config_ref{fping};
  203. our @subnets=();
  204. our $history_log_day;
  205. our $history_syslog_day;
  206. our $history_trafstat_day;
  207. our $log_owner_user = $config_ref{log_owner_user};
  208. our $log_owner_group = $config_ref{log_owner_group};
  209. our $log_file_mode = '0660';
  210. ################################################################
  211. our $def_timeout = 90;
  212. our $parallel_process_count = 10;
  213. our $cpu_count = 1;
  214. ################## DB options ##################################
  215. our $save_detail;
  216. our $add_unknown_user;
  217. our $router_ip;
  218. our $dns_server;
  219. our $dhcp_server;
  220. our $snmp_default_version;
  221. our $snmp_default_community;
  222. our $KB;
  223. our $office_networks;
  224. our $hotspot_networks;
  225. our $all_networks;
  226. our @office_network_list;
  227. our @hotspot_network_list;
  228. our @all_network_list;
  229. our $free_networks;
  230. our $vpn_networks;
  231. our @free_network_list;
  232. our @vpn_network_list;
  233. our $dhcp_pool;
  234. our $default_user_ou_id;
  235. our $default_hotspot_ou_id;
  236. our $history;
  237. our $history_dhcp;
  238. our $router_login;
  239. our $router_password;
  240. our $router_port;
  241. our $org_name;
  242. our $domain_name;
  243. our $connections_history;
  244. our $dbh;
  245. our $urgent_sync = 0;
  246. our $tftp_dir=$Config->{_}->{tftp_dir} || '/var/lib/tftpboot';
  247. our $tftp_server=$Config->{_}->{tftp_server} || '';
  248. our $ignore_hotspot_dhcp_log;
  249. our $ignore_update_dhcp_event;
  250. our $update_hostname_from_dhcp;
  251. our $office_networks;
  252. our $free_networks;
  253. our $vpn_networks;
  254. our $hotspot_networks;
  255. our $all_networks;
  256. our %subnets_ref;
  257. our $last_refresh_config = time();
  258. our %switch_auth = (
  259. '8'=>{'vendor'=>'Allied Telesis','enable'=>'en','proto'=>'essh','port'=>'22','login'=> '(login|User Name):','password'=>'Password:','prompt'=>qr/(\010\013){0,5}(([-\w]+|[-\w(config)+])\#|[-\w]+\>)/},
  260. '3'=>{'vendor'=>'Huawei','proto'=>'essh','port'=>'22','enable'=>'system-view','login'=> 'login as:','password'=>'Password: ','prompt'=>qr/(\<.*\>|\[.*\])/},
  261. '16'=>{'vendor'=>'Cisco','proto'=>'ssh','port'=>'22','enable'=>'en','login'=> 'Username:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  262. '5'=>{'vendor'=>'Raisecom','proto'=>'telnet','port'=>'23','enable'=>'en','login'=> 'Login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  263. '6'=>{'vendor'=>'SNR','proto'=>'telnet','port'=>'23','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  264. '7'=>{'vendor'=>'Dlink','proto'=>'telnet','port'=>'23','login'=> 'UserName:','password'=>'PassWord:','prompt'=>qr/[-\w]+\#$/},
  265. #'15'=>{'vendor'=>'HP','proto'=>'telnet','port'=>'23','enable'=>'system-view','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  266. '2'=>{'vendor'=>'Eltex','proto'=>'telnet','port'=>'23','login'=> 'User Name:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  267. '17'=>{'vendor'=>'Maipu','proto'=>'telnet','port'=>'23','login'=> 'login:','password'=>'password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  268. '4'=>{'vendor'=>'Zyxel','proto'=>'telnet','port'=>'23','login'=> 'User name:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+]|[-\w(config-interface)+])\#/},
  269. '38'=>{'vendor'=>'Qtech','proto'=>'telnet','port'=>'23','enable'=>'en','login'=> 'login:','password'=>'Password:','prompt'=>qr/([-\w]+|[-\w(config)+])\#/},
  270. '9'=>{'vendor'=>'Mikrotik','proto'=>'ssh','port'=>'22','login'=> 'login as:','password'=>'password:','prompt'=>qr/\[[-\w]+\@[-\w]+\]\s+\>/},
  271. '39'=>{'vendor'=>'Extreme','proto'=>'telnet','port'=>'23','login'=> 'login:','password'=>'password:','prompt'=>qr/[-\w]+\s\#\s/},
  272. );
  273. mkdir $LOG_DIR unless (-d $LOG_DIR);
  274. mkdir $config_ref{pid_dir} unless (-d $config_ref{pid_dir});
  275. my @cpu_list = `grep ^processor /proc/cpuinfo`;
  276. $cpu_count = scalar @cpu_list;
  277. 1;
  278. }