这两天在测试刘天斯写的一个开源工具-服务器机柜模拟图,以下是我想额外实现的功能,仅提供参考,也许某些人和我有一样的想法,所以今天把我这两天修改的一些地方提出来。

在这里我想要实现以下功能:

(1)     解决一个机柜多与10台服务器(默认10,现在14)

(2)     增加机柜数(默认7,现在8)

(3)     增加描述关键字

(4)     增加交换机图

(5)     当机展示

所有问题解决都是在servermap.cpp代码中修改
1个问题,解决方法(在此方法: void servermap::ProduRow()内)
for (int k=1;k<=14;k++)

{

if (k>=10)

point_last="-"+int2str(k);

红色字体是修改部分,原先代码如下,这样我们就一个机柜就可以有14台服务器了
for (int k=1;k<=10;k++)

{

if (k==10)

point_last="-10";
这里需要注意下,这样会将背景拉长,所以我们需要将jg.gif这张背景图增长,通过photoshop拉长,我增加4台服务器,所以我增长了280元素,现为720元素,并且还要修改HTMLstr+="<table width='99%' height='720'  border='0' cellpadding='1' cellspacing='0'>\n";

2个问题,解决比较简单(在此方法: void servermap::ProduRow()内)
for (int j=1;j<=8;j++)

{

point_moddle=point_moddle_key+int2str(j);

HTMLstr+="<td width='147' bgcolor='#eeeeee' background=\"/images/serverico/jg.gif\" >\n";

红色字体是修改部分,原先代码如下,这样我们一排就有8个机柜了

for (int j=1;j<=7;j++)

{

point_moddle=point_moddle_key+int2str(j);

HTMLstr+="<td width='147' bgcolor='#eeeeee' background=\"/images/serverico/jg.gif\" >\n";

3个问题,解决方法
                string idctype;

string (*p_info)[6];    // 所有的服务器信息指针(从XML文件中遍历);

string (*pserver_info)[6];      // 当前机房的服务器信息指针(从XML文件中遍历);

string ServerInfo[800][6];      // 所有的服务器信息数组(从XML文件中遍历);

string ServerInfo_CurrServer[300][6];   //当前机房数组,从ServerInfo中过滤出来;

原先是5,这里因为要增加一行,所以修改为6

在void servermap::ProduCurrServer()方法内添加
                                CurrServerInfoNumber+=1;

ServerInfo_CurrServer[CurrServerInfoNumber][0]=*(*(p_info+j)+0);

ServerInfo_CurrServer[CurrServerInfoNumber][1]=*(*(p_info+j)+1);

ServerInfo_CurrServer[CurrServerInfoNumber][2]=*(*(p_info+j)+2);

ServerInfo_CurrServer[CurrServerInfoNumber][3]=*(*(p_info+j)+3);

ServerInfo_CurrServer[CurrServerInfoNumber][4]=*(*(p_info+j)+4);

ServerInfo_CurrServer[CurrServerInfoNumber][5]=*(*(p_info+j)+5);

再在void servermap::ProduRow()函数添加
                                        if (point_all==substrServer)

{

DIVstr+="IP:"+*(*(pserver_info+m)+0)+"<br>";

DIVstr+="操作系统:"+*(*(pserver_info+m)+2)+"<br>";

DIVstr+="位置:"+*(*(pserver_info+m)+3)+"<br>";

DIVstr+="机型:"+*(*(pserver_info+m)+4)+"<br>";

DIVstr+="描述型:"+*(*(pserver_info+m)+5)+"<br>";

当然,你还需要在ServerInfoAll.xml添加一行

<serverinfo>

<ip>192.168.2.1</ip>

<classid>40</classid>

<os>Centos5.5</os>

<locate>01-01-02</locate>

<bodytype>1U</bodytype>

<description>This is server!</description>

</serverinfo>

这样就满足了我人的需求了

4个问题,和前面一个差不多,只不过需要增加一个方法,做些交换机up,down的gif.

第1步,先做switch up,down动画,此步略
第2步, 再在ServerInfoAll.xml添加一行,如下:

<serverinfo>

<ip>192.168.1.1</ip>

<classid>40</classid>

<os>H3C</os>

<locate>01-01-01</locate>

<bodytype>2U</bodytype>

<type>switch</type>

<description>This is switch-H3c!</description>

</serverinfo>
第3步,如上面增加一个关键字&ldquo;描述&rdquo;做法一样,按前面的做法,再做一次.

第4步,再加一个判定条件和一个交换机状态函数,函数名GetSwitchCondition

条件判断,如下

if(*(*(pserver_info+m)+5)=="server")

if (*(*(pserver_info+m)+4)=="1U")

HTMLstr+="<img src='/images/serverico/"+GetServerCondition(*(*(pserver_info+m)+0),"1U")+"' width='127' height='12' style=\"vertical-ali

gn:bottom;\"  return false\"  return false\">";

else if (*(*(pserver_info+m)+4)=="2U")

HTMLstr+="<img src='/images/serverico/"+GetServerCondition(*(*(pserver_info+m)+0),"2U")+"' width='127' height='24' style=\"vertical-ali

gn:bottom;\"  return false\"  return false\">";

else        HTMLstr+="<img src='/images/serverico/"+GetServerCondition(*(*(pserver_info+m)+0),"6U")+"'  height='76' style=\"vertical-align:

bottom;\"  return false\"  return false\">";

else   HTMLstr+="<img src='/images/serverico/"+GetSwitchCondition(*(*(pserver_info+m)+0),"1U")+"' width='127' height='12' style=\"vertical-alig

n:bottom;\"  return false\"  return false\">";

string servermap::GetSwitchCondition (string ip,string servertype)

{

bool Obtaining=false;

for (int i=0;i<50;i++)

{

if (ServerDownIP[i].c_str()==ip)

{

Obtaining=true;

break;

}

}

//printf("%s",ip.c_str());

if (servertype=="1U")

if (Obtaining)

return "switch_down.gif";

else return "switch_up.gif";

}
其实,这里不需要传递交换机的size的,但我想以后交换机有大与1U的,那到时候还需要再写,索性就保留吧。

5个问题,这个问题比较简单,不知道是不是刘天斯故意这样做的,没有将获取主机Down信息的函数放到合适的位置,导致此功能无法实现。

解决方法:在构造函数中,将       
//获取当前服务器清单;

Getdownserver();

此函数调用放到       
//当机文件位置初始化;

downfile="/home/ServerMap/ServerDownlist";
这个下面就成了,因为Getdownserver()函数需要读取此变量!

OK,搞定!可能还有些大门呀,qiang什么之类的,估计需要修改css/js这些了,那需要微调到,等真需要,再搞吧!

贴些图:

ServerInfoAll.xml
<?xml version="1.0" ?><wml>
<serverinfo>
<ip>192.168.1.1</ip>
<classid>40</classid>
<os>H3C</os>
<locate>01-01-01</locate>
<bodytype>2U</bodytype>
<type>switch</type>
<description>This is switch-H3c!</description>
</serverinfo>
<serverinfo>
<ip>192.168.2.1</ip>
<classid>40</classid>
<os>Centos5.5</os>
<locate>01-01-02</locate>
<bodytype>1U</bodytype>
<type>server</type>
<description>This is server!</description>
</serverinfo>
<serverinfo>
<ip>192.168.2.2</ip>
<classid>40</classid>
<os>Centos5.5</os>
<locate>01-01-03</locate>
<bodytype>1U</bodytype>
<type>server</type>
<description>This is server!</description>
</serverinfo>
......

在这里还是再感谢刘天斯大侠,多出精文噢!好让我们多多学习!

如果想了解更多,请关注我们的公众号
公众号ID:opdevos
扫码关注

转载于:https://blog.51cto.com/5ydycm/1131289

拜读刘天斯的一个开源项目相关推荐

  1. 如何从0开始开源项目参与_如何开始一个开源项目

    如何从0开始开源项目参与 by Dmitriy Strukov 德米特里·斯特鲁科夫(Dmitriy Strukov) 如何开始一个开源项目 (How to start an Open Source ...

  2. [征询意见][投票]先集中力量做好一个开源项目

    最近一直考虑在博客园组织开源项目的开发,我觉得发挥社区力量做出成功的开源项目是社区价值的体现.虽然组织开源项目的难度很大,也有过失败的教训,但只有实际地去做,去真正地面对挑战,才有成功的可能,否则,只 ...

  3. 如何做好一个开源项目之徽章(二)

    在上一篇[如何做好一个开源项目(一)],笔者已经介绍过开源项目运作和维护的一些理念了,本篇开始,笔者将着重于介绍一些开源项目维护过程中的一些细节,比如徽章.构建等等.由于最近经常出差,所以博客有中断, ...

  4. 如何做好一个开源项目(一)

    做好一个开源项目其实是一件比较费时费力费心的工作,它的最大难点除了代码维护之外,还包括后期的维护和持续的跟进.我曾经做过不少开源项目,但是坚持下来的,目前有信心能够持续维护的也只有Magicodes. ...

  5. 开源项目贡献者_我如何从一名贡献者转变为一个开源项目维护者

    开源项目贡献者 by Dhanraj Acharya 通过Dhanraj Acharya 我如何从一名贡献者转变为一个开源项目维护者 (How I went from being a contribu ...

  6. 准备启动一个开源项目 - 技术族谱 - 先期利用Goolge云计算平台

    准备启动一个开源项目:技术族谱 . 是什么? 技术族谱 ,该项目提供一种手段,描述技术领域中的概念和知识点的关系,并以此关系网为基础,扩展相关应用. 为什么? 我是做计算机行业的,就先从我看到的现象说 ...

  7. 独立开发变现周刊(第41期):一个开源项目一个人每月收入8万美金

    分享独立开发.产品变现相关内容,每周五发布. 目录 1.Budibase: 开源的低代码平台 2.沃尔玛通过SEO每月获得2.5亿流量的秘密 3.DesignJoy: 一个人的设计团队,月收入9万美金 ...

  8. 如何开始做一个开源项目?他的亲身经历值得参考

    (点击上方公众号,可快速关注) 英文:Vincent Voyer,翻译:Linux爱好者 - nEoYe [导读]:作者 Vincent Voyer 用亲身经历鼓励大家从事开源活动:他在 Nodejs ...

  9. 怎样加入一个开源项目?

    1.应用场景/目的 主要用于如何加入一个开源项目,以及为自己实现一个开源项目做铺垫. 2.学习/参考 1. 文档 怎样加入一个开源项目? - 知乎 如何参与一个开源项目! - 云+社区 - 腾讯云 如 ...

最新文章

  1. 【tf.keras】TensorFlow 1.x 到 2.0 的 API 变化
  2. 如何在一个文件中写多个Vue组件(译-有删改)
  3. dcnctf-web-wp(部分)
  4. Java Web开发技术教程入门-JavaBean组件与Servlet
  5. 致诺奖得主:低报酬、超工时,为什么我们要追求科学事业?
  6. python关键字中文意思_python 字符串只保留汉字的方法
  7. [分布式训练] 单机多卡的正确打开方式:理论基础
  8. 在csdn中输入公式的方法
  9. 去掉快捷方式图标上的箭头
  10. Unity UI和场景适配
  11. SQL SERVER 高效存储过程分页(Max/Min方法)
  12. document.getElementById() 的作用
  13. SQL Server 数据库之字符串函数
  14. 采集屏幕编码H264
  15. UltraEdit+UE注册机并运行Java程序
  16. BFS算法(广度优先搜索)java
  17. HDFS 透明加密使用、Keystore和Hadoop KMS、加密区域、透明加密关键概念和架构、KMS配置
  18. 用python画一个机器猫歌词_用Python语言模型和LSTM做一个Drake饶舌歌词生成器!自己蒙了!...
  19. windows 打印机管理机制(任务后台等待机制)
  20. 当按下Alt-F4时阻止关闭Outlook,使其最小化(翻译)

热门文章

  1. 基于java的宠物管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
  2. Java 将两个日期的时间段按照一定天数进行周期切割
  3. Web的缓存加速(Squid的安装与配置)
  4. 信息系统项目管理师考前10天极限冲刺+答案(七)
  5. python输入百分制成绩s、按五级分制输出_输入一个百分制成绩,利用switch语句编写程序,要求输出成绩等级A B C D,E。90以上为A...
  6. 互联网巨头员工的跳槽去向与薪资涨幅
  7. .net core word转pdf_Enolsoft PDF to Word with OCR for Mac(PDF转Word软件)
  8. 架构师更多的是和人打交道,说说我见到和听说到的架构师升级步骤和平时的工作内容
  9. Ubuntu 20.04连接蓝牙适配器5.0版本
  10. 微软新版Edge浏览器可以完全替代谷歌的Chrome