【发布时间】:2018-09-17 05:47:06
【问题描述】:
需要红宝石的帮助!
我收集了有关 PHP 进程(PID、utimes)的数据。我有两个哈希。第一个“h1”看起来像:
"domain1" => { :utime => 0, :last_seen => 0, :process_count => 0, :process_count_avg => 0 },
"domain2" => { :utime => 0, :last_seen => 0, :process_count => 0, :process_count_avg => 0 }
这是它的代码:
h1[vhostname] ||= { :utime => 0, :last_seen => 0, :process_count => 0, :process_count_avg => 0 }
h1[vhostname][:utime] += utime_proc
h1[vhostname][:last_seen] = 0
'vhostname' 是包含域名的字符串。 'utime_proc' 是一个 utime 值。
在每个循环中,我将特定域的所有进程的所有 utime 相加,输出是 Domain 及其总和 utime。但这会扭曲真实的状态。
我需要做的是为特定域计算 utimes 的累积总和。是所有当前进程的 utime 总和,但要添加所有已结束进程的 utime 总和。我可能必须为每个子域 utime 存储 pid 进程,如果该进程消失,它的最后一个 utime 将添加到默认值('h1' 哈希):该域的 utime。
所以,我创建了另外两个哈希值:“h2”和“h3”。 'h3' 的值在每一轮循环中都会重置,这会存储(子)域的所有 PID,其 utime 如下所示:
h3[vhostname] = []
h3[vhostname] << {:pid => pid, :utime => utime_proc}
“h2”哈希存储之前所有循环轮次的 PID,与“h3”相同,但不会重置:
if not h2.key?(vhostname)
h2[vhostname] = []
h2[vhostname] << {:pid => pid, :utime => utime_proc}
end
输出哈希应该是这样的:
{"domain1"=>[{:pid=>2, :utime=>20}, {:pid=>1, :utime=>10}], "domain2"=>[{:pid=>1, :utime=>10}, {:pid=>3, :utime=>30}]}
现在我需要帮助: 1. 可能区分这两个散列,如果 PID 用于 disseapear,我需要将它们从“h2”散列中删除,并将其最后一个 utime 值与存储在“h1”中的 utime 值相加。 2. 我为域出现了新的 PID(在 'h3' 中是新 pid,而在 'h2' 中还没有),将此 PID 添加到 'h2' 中,并将其 utime 添加到特定域。
这些是我无法做到的。我知道我可以这样做:
'h2-h3' 或 'h3-h2' 但我不知道如何处理结果以及如何处理它。
伙计们,你们能帮帮我吗?我的代码的简短版本如下。我还是红宝石新手。
h1 = {}
# Hash to collect PID and its utimes
h2 = {}
loop do
# Hash to temporarly store PID and its utimes - in each cycle is reseting
h3 = {}
# Here I collect processes
#############
#############
# Collect PIDs and its utimes
# Store PIDs and its utimes temporarly - only for this loop round
h3[vhostname] = []
h3[vhostname] << {:pid => pid, :utime => utime_proc}
# is h2 empty? if so, this is probably first loop round
if not h2.key?(vhostname)
h2[vhostname] = []
h2[vhostname] << {:pid => pid, :utime => utime_proc}
else
# h2 is not empty, we can diff and sum
# PROBABLY PLACE I NEED TO HELP WITH
end
# Here I do some more magic with h1 and output the result with some delay
end
更新
我将 h2 和 h3 哈希结构更改为:
{:domain => "domain1.com", :pid => XXXX, :utime => YYYYY}
【问题讨论】:
-
正如我所描述的,预期的输出是域名及其累积运行时间,换句话说:在运行此脚本期间,特定域的所有 PHP 进程消耗了多少 CPU 运行时间。
标签: ruby hash diff cumulative-sum accumulator