hl10502的博客

XenCenter分析(一)

XenCenter是XenServer的Windows客户端管理工具,可以非常方便地管理和监视XenServer主机和资源池,以及部署、监视、管理和迁移虚拟机。

主要有以下功能:

  • 资源池管理
  • 物理主机管理
  • 虚拟机管理
  • 存储池管理
  • 模板管理

代码放在GitHub上托管,XenCenter 这个是我修改过的XenCenter版本。

项目结构

  • CFUValidator:
  • CommandLib:命令操作的公共类库,主要是IO、tar、HTTP
  • splash:启动界面的效果,使用C++编写
  • XenAdmin:XenCenter的主项目,包含所有的page、dialog、view
  • XenAdminTests:XenCenter的测试代码
  • XenCenterLib:一些工具类库
  • XenCenterVNC:物理主机、虚拟机的控制台
  • XenModel:模型类以及XAPI接口
  • XenOvfApi:OVF相关的API
  • XenOvfTransport:OVF导入导出的工具类库
  • XenServerHealthCheck:主机健康状态检查
  • xva_verify:xva文件校验

XenAdmin

XenAdmin是XenCenter代码的主程序的入口,基于C#的WinForm应用程序开发。研究XenCenter先从XenAdmin项目入手。

XenAdmin主要有以下的代码目录:

  • Actions:界面UI与导入OVF虚拟机的action类
  • Alerts:告警提示类
  • Commands:命令模式Commands操作类
  • ConsoleView:VNC控制台的视图与逻辑操作类
  • Controls:UI界面
  • Core:公共类库
  • Diagnostics:资源(Pool、Host、VM、SR等)检查、状态(HA、PBD等)检查
  • Dialogs:UI的所有弹出对话框
  • Help:帮助页面以及文档
  • HomePage:启动XenCenter之后的主页信息
  • Images:图片资源
  • Network:SSL连接与XAPI连接XenServer
  • Plugins:插件管理
  • Properties:license、配置、资源
  • RDP:
  • ReportViewer:报表视图
  • ServerDBs:模拟数据库
  • SettingsPanels:资源设置相关的page
  • TabPages:菜单的tabpages
  • TestResources:测试资源
  • Utils:工具类
  • Wizards:向导基础page与向导式操作page
  • Wlb:负载均衡
  • XenSearch:搜索相关的类

Program.cs

WinForm应用的Program类main方法

1
2
3
4
5
6
7
8
static public void Main(string[] Args)
{
//Upgrade settings
//获取当前操作系统信息
System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
Version appVersion = a.GetName().Version;
string appVersionString = appVersion.ToString();
log.DebugFormat("Application version of new settings {0}", appVersionString);

1
2
3
4
5
6
7
//清空XAPI连接信息
ConnectionsManager.XenConnections.Clear();
//清空连接的历史信息
ConnectionsManager.History.Clear();
//初始化搜索
Search.InitSearch(Branding.Search);
TreeSearch.InitSearch();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch (Environment.OSVersion.Version.Major)
{
case 6: // Vista, 2K8, Win7.
if (Application.RenderWithVisualStyles)
{
// Vista, Win7 with styles.
//根据操作系统版本设置样式
TitleBarStartColor = Color.FromArgb(242, 242, 242);
TitleBarEndColor = Color.FromArgb(207, 207, 207);
TitleBarBorderColor = Color.FromArgb(160, 160, 160);
TitleBarForeColor = Color.FromArgb(60, 60, 60);
HeaderGradientForeColor = Color.White;
HeaderGradientFont = new Font(DefaultFont.FontFamily, 11.25f);
HeaderGradientFontSmall = DefaultFont;
TabbedDialogHeaderFont = HeaderGradientFont;
TabPageRowBorder = Color.Gainsboro;
TabPageRowHeader = Color.WhiteSmoke;
1
2
3
4
//运行主窗口
MainWindow mainWindow = new MainWindow(argType, args);
Application.Run(mainWindow);

MainWindow是XenCenter的主窗口。

  • 上面部分是菜单栏与操作栏
  • 左侧是树形菜单栏
  • 右侧是主页与选项

XenCenter主窗口界面