|
小学三年级

|
楼主
大 中
小 发表于 2006-12-29 15:48 只看该作者
分享自己写的rmview script
写了很久,也对这个script改了很久。还是想要贴到这里,和大家分享一下自己写的东西。如果写得还可以,大家帮忙鼓励一下,也让自己觉得作配置管理可以::em64::4::" /> 点。关于这个script,要谢谢木木,他之前写得rmview给了我很多启发。
另外,觉得要发一篇格式好的帖子对我来说好难啊,不太想用附件,但是从word贴过来的文字太乱了,还是穿了附件上来,附件是我自己的总结,多了script的流程图。
引用:
删除view的script
1 Script描述环境:
OS:Windows XP 繁体,预设地区为英文(美国),短时间格式为yyyy/mm/dd
CC:2003.16.15
Perl:ActivePerl 5.8.8 Build 817
功能:
1. 删除单独的view
2. 删除某台机器上的view
3. 清理register server。删除30天来未和register server通信的机器上的view;删除最近3个月以来未使用的view。
实现语言:
Perl
2 Script UsageUsage: rm_view.pl [-single_view view_tag] | [-host host_name] | [-scrub registry_server]
3 Sub programsSub del_single_view:读入要删除的view tag,删除单独这个view。
Sub del_views_on_host:读入要删除的机器名,寻找到该机器上存在的view,删除这些view。
Sub scrub_server:读入要清理的register server。删除30天来未和register server通信的机器上的view;删除最近3个月以来未使用的view。
Sub delete_view:读入view tag,删除这个view。
Sub del_inactive_views:读入view tag,判断是否最近3个月来未曾使用,“yes”删除,“no”不删除。
Sub ping_host:读入机器名,ping 机器,成功返回1,否则返回0。
4 Script Code引用:
#########################################################################
# Purpose: 1.remove a single view
# 2.remove all views in the certain host
# 3.scrub the views that have not been used since 30 days
# Usage: rm_view.pl [-single_view view_tag] | [-host host_name] | [-scrub registry_server]
# Author: Kerry
# Date: 29-Dec-2006
#########################################################################
#!/usr/bin/perl -w
use Net::Ping;
$usage = "Usage:rm_view.pl [-single_view view_tag]|[-host host_name]|[-scrub registry_server]";
@month = qw/Jan Feb Mar Apr May Jur Jul Aug Sep Oct Nov Dec/;
if ($ARGV[0] eq "-single_view"){
&del_single_view;
}elsif ($ARGV[0] eq "-host"){
&del_views_on_host;
}elsif($ARGV[0] eq "-scrub"){
&scrub_server;
}else{
print $usage;
}
shift @ARGV;
# $del_single_view;
sub del_single_view{
die "Please input a view!\n$usage\n" unless $ARGV[1];
my $view_tag = $ARGV[1];
print "***Remove the view $view_tag***\n";
system("pause");
&delete_view($view_tag);
}
#delete all views existing on a certain host
sub del_views_on_host{
die "Please input a host!\n$usage\n" unless $ARGV[1];
my $host_name=$ARGV[1];
# find all views existing in the certain host
my @exit_views=`cleartool lsview|findstr \/I \\\\$host_name\\`;
foreach $exit_views (@exit_views){
my ($view)=(split /\s+/,$exit_views)[1];
print "***Delete the view $view***\n";
system("pause");
&delete_view($view);
}
}
# scrub rgy server and delete all views that have not been used since 30 days
sub scrub_server{
die "Please input a server!\n$usage\n" unless $ARGV[1];
$rgy_server=$ARGV[1];
# get valid clients
my @valid_clients=`cleartool lsclient -host $rgy_server -type all -short`;
foreach $valid_clients (@valid_clients){
chomp $valid_clients;
}
# get all views on the registry server
my @views=`cleartool lsview`;
my @clients;
foreach $views (@views){
$_=(split /\s+/, $views)[2];
@clients=(@clients,(split /\\/,$_)[2]);
}
# Match clients
# Delete all views exiting on clients which have not contacted with
# server since the lastest 30 days.
my $i=0;
@invalid_clients=@clients;
while($i<=$#valid_clients){
@invalid_clients=grep !/$valid_clients[$i]/i, @invalid_clients;
$i++;
}
@invalid_clients=sort @invalid_clients;
print @invalid_clients;
if(@invalid_clients){
push @invalid_clients,"null";
foreach my $j (0..$#invalid_clients-1){
unless($invalid_clients[$j]=~/$invalid_clients[$j+1]/i){
my @views=`cleartool lsview|findstr \/I \\\\$invalid_clients[$j]\\`;
my $view;
foreach $views (@views){
$view=(split /\s+/,$views)[1];
print "***Delete the view $view***\n";
system("pause");
&delete_view($view);
}
}
}
}else{
print "***All clients are active.***\n";
}
# Find views that have not been used since the latest 3 months.
foreach $valid_clients (@valid_clients){
my @views=`cleartool lsview|findstr \/I \\\\$valid_clients\\`;
my $view;
foreach $views (@views){
$view=(split /\s+/,$views)[1];
&del_inactive_views($view);
}
}
}
# use rmview to delete the view.
sub delete_view{
my $view_detail=`cleartool lsview -long @_`;
print "$view_detail\n";
my ($view,$path,$host,$uuid)=(split /\n/,$view_detail)[0,1,2,5];
$view=(split /:/,$view)[1];
$path=(split /:/,$path)[1];
$host=(split /:\s/,$host)[1];
$uuid=(split /uuid:/,$uuid)[1];
# delete the view
if(&ping_host($host)){
system("cleartool endview -server $view");
system("cleartool rmview $path");
}else{
system("cleartool unregister -view -uuid $uuid");
system("cleartool rmtag -view $view");
}
}
# Delete all views that hasn't been used since the lastest 3 months.
sub del_inactive_views{
# Find the view that hasn't been used since the lastest 3 months.
# List view's last accessed time.
my $view_detail=`cleartool lsview -long -properties @_`;
my ($view,$uuid,$accessed)=(split /\n/,$view_detail)[0,5,13];
my $i,$valid_date,$date;
if($accessed){
$view=(split /:/,$view)[1];
$uuid=(split /uuid:/,$uuid)[1];
$accessed=(split /-/,(split /\s/,$accessed)[2])[1];
$date=localtime();
$date=(split /\s/,$date)[1];
# Match the time
for($i=0;$i<@month;$i++){
if ($accessed eq $month[$i]){
last;
}
}
if($i<=8){
$valid_date= grep /$date/i,@month[$i..$i+3];
}elsif($i==9){
$valid_date= grep /$date/i,@month[$i,$i+1,$i+2,$i-9];
}elsif($i==10){
$valid_date= grep /$date/i,@month[$i,$i+1,$i-10,$i-9];
}else{
$valid_date= grep /$date/i,@month[$i,$i-11,$i-10,$i-9];
}
# print "$valid_date\n";
# Unregister the view and remove the view tag.
unless($valid_date){
print "***Delete the view $view***\n";
system("pause");
system("cleartool unregister -view -uuid $uuid");
system("cleartool rmtag -view $view");
}
}
}
sub ping_host{
$p = Net::Ping->new();
return 1 if $p->ping(@_);
$p->close();
return 0;
}
5 Disadvantage & ReportRmview.pl中sub srube_server还有可以改进的地方,这个sub program执行的效率不高。实际执行中register server上存在221个view,共历时1小时将所有view清理一遍,(中间有我按pause的总计大概10分钟),共找出38个3个月内未使用的view,0个30天内未活动的机器,18台机器cc无法取得albd通信或view server通信失败报错。这个sub program中调用cc lsview的地方太多,可以在最初的调用中就用array将cc lsview输出的结果保存,后续的程序可以对这个原始的array进行数据处理,剥离出需要的信息,而不必再次调用cc lsview,这样的话scrub_server的效率会提高很多。这个改进我会在以后的日子进行修改。这次暂时做到这步。
[ 本帖最后由 jo-kerry 于 2006-12-29 15:51 编辑 ]
附件
-
rmview_design.rar
(136.83 KB, 2006-12-29 15:48)
-
关于附件奖励,
下载次数 42,
使用阶层: 中级
, 推荐星级: ★★★★★ , 出售价格: 10 金钱 , 你的购买价格: 10 金钱,【快速获取积分】
搜索更多相关主题的帖子:
script rmview 分享
© 本文为 jo-kerry 与 SCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系 管理员。
|