Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
喜羊羊3508
Dak
提交
8ed0b27e
D
Dak
项目概览
喜羊羊3508
/
Dak
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dak
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8ed0b27e
编写于
12月 16, 2008
作者:
J
Joerg Jaspert
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
logs.py
Added script from thomas Signed-off-by:
N
Joerg Jaspert
<
joerg@debian.org
>
上级
be23f99a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
130 addition
and
0 deletion
+130
-0
ChangeLog
ChangeLog
+4
-0
tools/logs.py
tools/logs.py
+126
-0
未找到文件。
ChangeLog
浏览文件 @
8ed0b27e
2008
-
12
-
16
Joerg
Jaspert
<
joerg
@
debian
.
org
>
*
tools
/
logs
.
py
:
Added
script
from
Thomas
.
2008
-
12
-
15
Joerg
Jaspert
<
joerg
@
debian
.
org
>
*
config
/
debian
/
cron
.
hourly
:
Call
the
removals
.
pl
...
...
tools/logs.py
0 → 100755
浏览文件 @
8ed0b27e
#!/usr/bin/python
# (c) 2008 Thomas Viehmann
# Free software licensed under the GPL version 2 or later
import
os
,
re
,
datetime
,
sys
import
tempfile
,
time
ITEMS_TO_KEEP
=
10
CACHE_FILE
=
os
.
path
.
join
(
os
.
path
.
dirname
(
sys
.
argv
[
0
]),
'time_cache'
)
GRAPH_DIR
=
'/home/tviehmann/public_html/stat'
LINE
=
re
.
compile
(
r
'(?:|.*/)dinstall_(\d{4})\.(\d{2})\.(\d{2})-(\d{2}):(\d{2}):(\d{2})\.log\.bz2:'
+
r
'Archive maintenance timestamp \d+ \(([^\)]*)\): (\d{2}):(\d{2}):(\d{2})$'
)
UNSAFE
=
re
.
compile
(
r
'[^a-zA-Z/\._:0-9\- ]'
)
graphs
=
{
"dinstall1"
:
{
"keystolist"
:[
"pg_dump1"
,
"i18n 1"
,
"accepted"
,
"make-suite-file-list"
,
"apt-ftparchive"
,
"pdiff"
,
"release files"
,
"w-b"
,
"i18n 2"
,
"apt-ftparchive cleanup"
],
"showothers"
:
True
},
"dinstall2"
:
{
"keystolist"
:[
'External Updates'
,
'p-u-new'
,
'o-p-u-new'
,
'cruft'
,
'import-keyring'
,
'overrides'
,
'cleanup'
,
'scripts'
,
'mirror hardlinks'
,
'stats'
,
'compress'
],
"showothers"
:
False
},
"totals"
:{
"keystolist"
:[],
"showothers"
:
True
}}
#'mirror hardlinks', 'apt-ftparchive', 'logremove', 'startup', 'import-keyring', 'release files', 'accepted', 'stats', 'o-p-u-new', 'i18n 2', 'locked part finished', 'i18n 1', 'cruft', 'pdiff', 'init', 'cleanup', , 'p-u-new', 'run-parts', 'compress', 'scripts', 'expire_dumps', 'removed', 'make-suite-file-list', 'pg_dump1', 'pg_dump2', 'overrides', 'reports', 'merkel projectb push', 'buildd', 'apt-ftparchive cleanup', 'w-b'
wantkeys
=
set
()
for
tmp
in
graphs
.
values
():
wantkeys
|=
set
(
tmp
[
"keystolist"
])
d
=
{}
kl
=
[]
ks
=
set
()
if
os
.
path
.
exists
(
CACHE_FILE
):
for
l
in
open
(
CACHE_FILE
):
dt
,
l
=
l
.
split
(
'
\t
'
,
1
)
l
=
map
(
lambda
x
:
(
lambda
y
:
(
y
[
0
],
float
(
y
[
1
])))(
x
.
split
(
':'
,
1
)),
l
.
split
(
'
\t
'
))
newk
=
[
x
[
0
]
for
x
in
l
if
x
[
0
]
not
in
ks
]
kl
+=
newk
ks
|=
set
(
newk
)
d
[
dt
]
=
dict
(
l
)
olddt
=
None
args
=
sys
.
argv
[
1
:]
m
=
UNSAFE
.
search
(
' '
.
join
(
args
))
if
m
:
raise
Exception
(
"I don't like command line arguments including char '%s'"
%
m
.
group
(
0
))
if
args
:
for
l
in
os
.
popen
(
'bzgrep -H "Archive maintenance timestamp" "'
+
'" "'
.
join
(
args
)
+
'"'
):
m
=
LINE
.
match
(
l
)
if
not
m
:
raise
Exception
(
"woops '%s'"
%
l
)
g
=
map
(
lambda
x
:
(
not
x
.
isdigit
()
and
x
)
or
int
(
x
),
m
.
groups
())
dt
=
datetime
.
datetime
(
*
g
[:
6
])
if
olddt
!=
dt
:
oldsecs
=
0
olddt
=
dt
dt2
=
datetime
.
datetime
(
*
(
g
[:
3
]
+
g
[
-
3
:]))
secs
=
(
dt2
-
dt
).
seconds
assert
secs
>=
0
# should add 24*60*60
k
=
g
[
6
]
d
.
setdefault
(
str
(
dt
),{})[
k
]
=
(
secs
-
oldsecs
)
/
60.0
oldsecs
=
secs
if
k
not
in
ks
:
ks
.
add
(
k
)
kl
.
append
(
k
)
if
(
wantkeys
-
ks
):
print
>>
sys
.
stderr
,
"warning, requested keys not found in any log: "
+
' '
.
join
(
wantkeys
-
ks
)
datakeys
=
d
.
keys
()
datakeys
.
sort
()
datakeys
=
datakeys
[
-
ITEMS_TO_KEEP
:]
f
=
open
(
CACHE_FILE
+
".tmp"
,
"w"
)
for
dk
in
datakeys
:
print
>>
f
,
dk
+
'
\t
'
+
'
\t
'
.
join
(
[
"%s:%s"
%
(
k
,
str
(
d
[
dk
][
k
]))
for
k
in
kl
if
k
in
d
[
dk
]])
f
.
close
()
os
.
rename
(
CACHE_FILE
+
".tmp"
,
CACHE_FILE
)
def
dump_file
(
outfn
,
keystolist
,
showothers
):
showothers
=
(
showothers
and
1
)
or
0
# careful, outfn is NOT ESCAPED
f
=
tempfile
.
NamedTemporaryFile
()
otherkeys
=
ks
-
set
(
keystolist
)
print
>>
f
,
'
\t
'
.
join
(
keystolist
+
showothers
*
[
'other'
])
for
k
in
datakeys
:
v
=
d
[
k
]
others
=
sum
(
map
(
lambda
x
:
v
.
get
(
x
,
0
),
otherkeys
))
print
>>
f
,
k
+
'
\t
'
+
'
\t
'
.
join
(
map
(
lambda
x
:
str
(
v
.
get
(
x
,
0
)),
keystolist
)
+
showothers
*
[
str
(
others
)])
f
.
flush
()
n
=
f
.
name
p
=
os
.
popen
(
"R --vanilla --slave > /dev/null"
,
"w"
)
p
.
write
(
"""
d = read.table("%(datafile)s", sep = "
\t
")
#d[["ts"]] <- as.POSIXct(d[["timestamp"]])
k = setdiff(names(d),c("ts","timestamp"))
#palette(rainbow(max(length(k),2)))
palette(c("midnightblue", "gold", "turquoise", "cyan", "black", "red", "OrangeRed", "green3", "blue",
"magenta", "tomato4",
"violetred2","thistle4", "steelblue2", "springgreen4",
"salmon","gray"))
#plot(d[["runtime"]],d[["compress"]],type="l",col="blue")
#lines(d[["runtime"]],d[["logremove"]],type="l",col="red")
#legend(as.POSIXct("2008-12-05"),9500,"logremove",col="red",lty=1)
bitmap(file = "%(outfile)s", type="png16m",width=16.9,height=11.8)
#plot(d[["ts"]],d[["compress"]],type="l",col="blue")
#lines(d[["ts"]],d[["logremove"]],type="l",col="red")
barplot(t(d[,k]), col=palette(), xlab="date",ylab="time/minutes"
)
par(xpd = TRUE)
legend(xinch(-1.2),par("usr")[4]+yinch(1),legend=k,
ncol=3,fill=1:15) #,xjust=1,yjust=1)
text(xinch(10),par("usr")[4]+yinch(.5),"%(title)s", cex=2)
dev.off()
q()
"""
%
{
'datafile'
:
n
,
'outfile'
:
outfn
,
'title'
:((
not
showothers
)
*
"partial "
)
+
"dinstall times"
})
p
.
flush
()
assert
not
p
.
close
()
for
afn
,
params
in
graphs
.
items
():
dump_file
(
os
.
path
.
join
(
GRAPH_DIR
,
afn
+
'.png'
),
**
params
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录