sub
system_activity_report {
my
(
$wait_time
) =
shift
;
if
(!
defined
(
$wait_time
)) {
$wait_time
= 60;
}
my
(
$sec
,
$min
,
$hour
) =
localtime
(
time
());
my
(
$first_time
) =
time
();
my
(
$first_usertime
,
$first_systime
,
$first_idletime
,
$first_uptime
) = Pstat();
sleep
$wait_time
;
my
(
$last_time
) =
time
();
my
(
$last_usertime
,
$last_systime
,
$last_idletime
,
$last_uptime
) = Pstat();
my
(
$diff_user
) =
$last_usertime
-
$first_usertime
;
my
(
$diff_sys
) =
$last_systime
-
$first_systime
;
my
(
$diff_idle
) =
$last_idletime
-
$first_idletime
;
my
(
$diff_time
) =
$last_time
-
$first_time
;
my
(
$prc_user
) =
int
( (
$diff_user
* 100) /
$diff_time
);
my
(
$prc_sys
) =
int
( (
$diff_sys
* 100) /
$diff_time
);
my
(
$prc_idle
) =
int
( (
$diff_idle
* 100) /
$diff_time
);
my
(
$prc_io
) = 100 - (
$prc_user
+
$prc_sys
+
$prc_idle
);
my
(
$mday
,
$mon
,
$year
);
(
$sec
,
$min
,
$hour
,
$mday
,
$mon
,
$year
) =
localtime
(
time
());
$mon
++;
$time
=
sprintf
(
"%2.2d:%2.2d:%2.2d"
,
$hour
,
$min
,
$sec
);
@result
= (
"$mon/$mday/$year $time"
,
$prc_user
,
$prc_sys
,
$prc_io
,
$prc_idle
);
return
@result
;
}
sub
Pstat {
my
(
$uptime_days
,
$uptime_hr
,
$uptime_min
,
$uptime_sec
);
my
(
$usertime_hr
,
$usertime_min
,
$usertime_sec
);
my
(
$kernel_hr
,
$kernel_min
,
$kernel_sec
,
$process
);
my
(
$user_cpu
,
$sys_cpu
);
my
(
$uptime
,
$idletime
,
$usertime
,
$systime
);
open
(PSTAT,
"c:\\ntreskit\\pstat |"
);
while
(<PSTAT>) {
if
(/^\s
*User
\s
*Time
/) {
last
;
}
if
(/uptime\:/) {
(
$uptime_days
,
$uptime_hr
,
$uptime_min
,
$uptime_sec
) =
/uptime\:\s*(\d+)\s+(\d+)\:(\d+)\:(\d+)\./;
$uptime
= (
$uptime_days
* 24 * 3600) +
$uptime_hr
* 3600 +
$uptime_min
* 60 +
$uptime_sec
;
}
}
while
(<PSTAT>) {
if
(/^\s*$/ || /^\s
*pid
\:/) {
last
;
}
(
$usertime_hr
,
$usertime_min
,
$usertime_sec
,
$kernel_hr
,
$kernel_min
,
$kernel_sec
,
$process
) =
/^\s*(\d+)\:(\d+)\:(\d+)\.\d+\s+(\d+)\:(\d+)\:(\d+)\.\d+[\s\d]+(.*)$/;
$user_cpu
=
$usertime_hr
* 3600 +
$usertime_min
* 60 +
$usertime_sec
;
$sys_cpu
=
$kernel_hr
* 3600 +
$kernel_min
* 60 +
$kernel_sec
;
if
(
$process
=~ /Idle Process/) {
$idletime
=
$user_cpu
+
$sys_cpu
;
}
else
{
$usertime
+=
$user_cpu
;
$systime
+=
$sys_cpu
;
}
}
close
(PSTAT);
return
(
$usertime
,
$systime
,
$idletime
,
$uptime
);
}
1;