Advertisement
Guest User

daywalker - perl

a guest
Jun 21st, 2012
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 6.05 KB | None | 0 0
  1. use warnings;
  2. use strict;
  3. use Sys::Statistics::Linux;
  4. use Net::SMTP::SSL;
  5. $0='/dev/null/dayWalKeR';
  6.  
  7. #------------------------#
  8. # Declare some variables #
  9. #------------------------#
  10. my $to='my@email.com';
  11. my $subject='Report-Information';
  12. my $email_pass='<MY_PASS>';
  13. my $from='other@email.com';
  14. my $smtp;
  15. my $count=0;
  16. #---------------------------------------#
  17.  
  18. #
  19.  
  20. if(fork())
  21. {
  22.     close(STDOUT);
  23.     close(STDERR);
  24.     close(STDIN);
  25.     exit;
  26. }
  27.  
  28. while(1)
  29. {
  30.  
  31. if(not $smtp = Net::SMTP::SSL->new('smtp.gmail.com',Port => 465, Debug => 0))
  32. {
  33.     die "Could not connect to mail server\n";
  34. }
  35. $smtp->auth($from, $email_pass) || die "Authentication failed!\n";
  36. #------------------------#
  37. # Initialize the module  #
  38. #------------------------#
  39. my $lxs = Sys::Statistics::Linux->new(
  40.         sysinfo   => 1,
  41.         cpustats  => 1,
  42.         procstats => 1,
  43.         memstats  => 1,
  44.         netstats  => 1,
  45.         sockstats => 1,
  46.         loadavg   => 1,
  47.     );
  48. sleep 1; my $stat = $lxs->get;
  49. #---------------------------------------#
  50.  
  51. #-------------------------#
  52. # Initialize the objects  #
  53. #-------------------------#
  54. # get cpu stats
  55. my $cpu  = $stat->cpustats->{cpu};
  56. my $cpu_user_perc   = $cpu->{user};
  57. my $cpu_nice_perc   = $cpu->{nice};
  58. my $cpu_system_perc = $cpu->{idle};
  59. my $cpu_idle_perc   = $cpu->{system};
  60. my $cpu_iowait_perc = $cpu->{iowait};
  61.  
  62. #---------------------------------------#
  63. # get loadavg stats
  64. #--------------------#
  65. my $loadavg_1       = $stat->loadavg->{avg_1};
  66. my $loadavg_5       = $stat->loadavg->{avg_5};
  67. my $loadavg_15      = $stat->loadavg->{avg_15};
  68. #my $load=$loadavg_1;
  69. #$load =~ s/\.//;
  70. #---------------------------------------#
  71. # get mem stats in MB
  72. #--------------------#
  73. my $mem_used    = int($stat->memstats->{memused}/1024);
  74. my $mem_free    = int($stat->memstats->{memfree}/1024);
  75. my $mem_total   = int($stat->memstats->{memtotal}/1024);
  76. #
  77. # => to_do
  78. #
  79. my $mem_buffers = int($stat->memstats->{buffers}/1024);
  80. my $mem_cache  = int($stat->memstats->{cached}/1024);
  81. # my $swap_used  = int($stat->memstats->{swap_used}/1024);
  82. # my $swap_free  = int($stat->memstats->{swap_free}/1024);
  83. # my $swap_total = int($stat->memstats->{swap_total}/1024);
  84. #if(-z $mem_buffers or $mem_buffers==0)
  85. #{
  86. #    print "dobro";
  87. #}
  88. # => end to_do
  89. #
  90. #---------------------------------------#
  91. # get proc status
  92. #--------------------#
  93. my $wait_io_proc    = $stat->procstats->{blocked};
  94. my $running_proc    = $stat->procstats->{running};
  95. #---------------------------------------#
  96. # get socket statistics
  97. #--------------------#
  98. my $socket_used     = $stat->sockstats->{used};
  99. my $socket_tcp      = $stat->sockstats->{tcp};
  100. my $socket_udp      = $stat->sockstats->{udp};
  101. #---------------------------------------#
  102. # get SysInfo
  103. #--------------------#
  104. my $hostname         = $stat->sysinfo->{hostname};
  105. my $kernel_name      = $stat->sysinfo->{kernel};
  106. my $kernel_release   = $stat->sysinfo->{release};
  107. my $uptime           = $stat->sysinfo->{uptime};
  108. my $idle_time        = $stat->sysinfo->{idletime};
  109.  
  110. #---------------------------------------#
  111.  
  112.     if( $loadavg_1 > 0.80 || $mem_free < 100 )
  113.     {
  114.         my $hrule = "\n";
  115.         my $hrule2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n";
  116.         my $sys_info_msg = " Hostname: '$hostname' - Kernel: '$kernel_name $kernel_release' - Uptime: '$uptime' - Idling: '$idle_time'\n";
  117.         my $load_avg_msg = " Load Average: [$loadavg_1, $loadavg_5, $loadavg_15] | RAM used:[$mem_used MB] - free:[$mem_free MB] - total:[$mem_total MB] - cache:[$mem_cache MB] - buffer:[$mem_buffers MB]\n";
  118.         my $cpu_stat_msg = " CPU Usage statistics:\n user usage: [$cpu_user_perc\%] - nice usage: [$cpu_nice_perc\%] - system usage: [$cpu_system_perc\%] - I/O usage: [$cpu_iowait_perc\%] - idle usage: [$cpu_idle_perc\%]\n";
  119.         my $proc_stat_msg = " Processes on I/O: [$wait_io_proc] - Running processes: [$running_proc] - Sockets used: [$socket_used] - TCP Sockets: [$socket_tcp] - UDP Sockets: [$socket_udp]\n";
  120.         my $proc_ram_cpu = `ps -eo user,stat,rss,vsz,pid,cputime,cmd --width 100 --sort rss,vsz`;
  121.         my $active_connections = `netstat -anlp | grep ESTABLISHED`;
  122.         my $ps_output = `ps auwwxf`;
  123.         my $top_snap = `top -n 1 -b`;
  124.  
  125.         my $message = $hrule2 . $sys_info_msg . $hrule . $load_avg_msg . $hrule . $cpu_stat_msg . $hrule . $proc_stat_msg . $hrule2 . "\n";
  126.         $message = $message . " Active connections:\n" . $hrule . $active_connections . $hrule . $hrule2 . $hrule . " Top RAM hungry processes:\n" . $hrule . $proc_ram_cpu . "\n" . $hrule2 . "\n" .  " Ps auwwwxf output:\n" . $hrule . $ps_output . $hrule . $hrule2 . $hrule . " top -n1 -b snapshot:\n\n" . $top_snap . $hrule . $hrule2;
  127.  
  128.         $smtp->mail($from . "\n");
  129.         my @recipients = split(/,/, $to);
  130.         foreach my $recipient (@recipients)
  131.         {
  132.             $smtp->to($recipient . "\n");
  133.         }
  134.  
  135.         $smtp->data();
  136.         $smtp->datasend("From: " . $from . "\n");
  137.         $smtp->datasend("To: " . $to . "\n");
  138.         $smtp->datasend("Subject: " . $subject . "\n");
  139.         $smtp->datasend("MIME-Version: 1.0\n");
  140.         $smtp->datasend("Content-Type: text/plain; charset=iso-8859-1\n");
  141.         $smtp->datasend("Content-Transfer-Encoding: quoted-printable\n");
  142.         $smtp->datasend($message . "\n\n");
  143.         $smtp->dataend();
  144.         $smtp->quit;
  145.  
  146.         $message = "";
  147.         $hrule= $hrule2= $sys_info_msg= $load_avg_msg= $cpu_stat_msg= $message= $proc_stat_msg= $proc_ram_cpu= $active_connections= $ps_output= $top_snap= $stat = undef;
  148.  
  149.         if($count<=5)
  150.         {
  151.             $count=$count+1;
  152.             sleep (60);
  153.         }
  154.         $count=0;
  155.     }
  156.  
  157.     $hostname=$kernel_name=$kernel_release=$uptime=$idle_time=$socket_used=$socket_tcp=$socket_udp=$wait_io_proc=$running_proc=$mem_buffers=$mem_cache=$mem_used=$mem_free=$mem_total=$loadavg_1=$loadavg_5=$loadavg_15=$stat=$cpu_user_perc=$cpu_system_perc=$cpu_idle_perc=$cpu_iowait_perc=$cpu = undef;
  158.  
  159.     sleep (60);
  160.  
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement