openstack之horizon源码分析

一、基础准备:

  Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizon可以说高度match了django的设计风格。网站程序基本有三部分组成,业务逻辑代码(Python),静态文件(js/css),模板(Python中的 jinja,mako,nodejs中有jade), 用户向webserver发起请求之后,server程序找到当前url对应的模板,填充模板变量(输出成字符串形式的html源码),返回给浏览器,浏览器渲染页面。一般模板语言都有继承(extend),插入(include)等特性,来提高页面的复用率。

   Horizon做得就更彻底一些,它将页面上所有元素模块化,网页中一些常见元素,表单,表格,标签页,全部封装成Python类,每个组件有自己 对应的一小块html模板.当渲染整个页面的时候,Horizon先找到当前页面有多少组件,将各个组件分别进行渲染变成一段html片段,最后拼装成一 个完整的html页面,返回浏览器。

     总结Horizon的特点:

  • 页面元素模块化
  • 子面板可插
  • All in One(从部署上来说,Horizon只有它自己这一个组件)

二、分析horizon

  1、horizon设计分为三层:Dashboard->PanelGroup->Panel 

    a、project普通用户登录后看到的是项目面板

    b、admin管理登录看到可见左测的管理员面板

    c、settings右上角的设置面板

    d、identity不同的角色登录之后,左侧的“身份”面板,可设置项目用户

    e、交换机管理面板

  每个dashboard都是django中的一个app,django中的app可以理解成对业务逻辑模块化的一种手段,里面可以包含自己独有的url设定,模板和业务逻辑代码。每个dashboard下定义了一系列的PanelGroup,虚拟机管理对应到界面上就是一个PanelGroup(ManageCompute),里面有一系列的子panel(Overview、Instance、Volumes...). swift, heat, neutron的管理面板自都是一个PanelGroup,底下有各自的子Panel。

  2、项目结构

    Horizon项目核心的代码包有两个:openstack-dashboardpython-django-horizon

    第一个包是控制台代码的具体实现,是一个基于Django框架的web应用,安装后主要文件在/usr/share/openstack-dashboard/路径下。第二个包是通用的一些Python类库,也包括一些静态文件,安装后在/usr/lib/python2.7/dist-packages/horizon下。定制化开发,主要是修改业务代码,基本不需要修改python-django-horizon,所以我们分析的重点放在openstack-dashboard这个包上。

   图中的7个名词在代码中都可以对应上,代码的层级结构还是很清晰的。

时间: 2024-11-03 03:47:00

openstack之horizon源码分析的相关文章

openstack之horizon源码分析之二

一.概述: django基础入手: django新建project:#django-admin startproject mysite 1 生成如下目录: 2 mysite 3 ├── manage.py 4 └── mysite 5 ├── __init__.py 6 ├── settings.py 7 ├── urls.py 8 └── wsgi.py 创建一个app,名叫demo:#cd mysite; pythone manage.py startapp demo  1 则生成如下目录:

Openstack Nova 源码分析 — 使用 VCDriver 创建 VMware Instance

目录 目录 前言 流程图 nova-compute vCenter 前言 在上一篇Openstack Nova 源码分析 - Create instances (nova-conductor阶段)中,记录了 nova-api 接收到创建虚拟机的请求后,在 nova-conductor 中的执行流程.最终 nova-comductor 通过调用 nova-compute 的 RPC 接口函数 compute_rpcapi.build_and_run_instance() 将创建虚拟机的请求,通过

Openstack Nova 源码分析 — RPC 远程调用过程

目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacomputemanager 模块 最后 Nova Project Services nova-api:捕获novaclient发送过来的HTTP请求,并且将它转换为AMQP消息,通过Queue来与别的services通信. nova-conductor:为数据库访问提供了一层安全保障. NOTE:除了nova-

WebWork2源码分析

web Author: zhuam   昨晚一口气看完了夏昕写的<<Webwork2_Guide>>,虽然文档资料很简洁,但仍不失为一本好的WebWork2书籍,看的出作者的经验和能力都是非常的老道,在此向作者的开源精神致敬,并在此引用夏昕的那句话So many open source projects, Why not Open your Documents?   今天下载了最新的WebWork2版本, 开始了源码分析,这份文档只能算是我的个人笔记,也没时间细细校对,且个人能力有

JUnir源码分析(一)

一.引子 JUnit源码是我仔细阅读过的第一个开源项目源码.阅读高手写的代码能学到一些好的编程风格和实现思路,这是提高自己编程水平行之有效的方法,因此早就想看看这些赫赫有名的框架是怎么回事了.今天就拿最简单的JUnit下手,也算开始自己的源码分析之路.   JUnit作为最著名的单元测试框架,由两位业界有名人士协力完成,已经经历了多次版本升级(了解JUnit基础.JUnit实践).JUnit总体来说短小而精悍,有不少值得我们借鉴的经验在里面:但是也有一些不足存在,当然这对于任何程序来说都是难免的

java io学习(三) 管道的简介,源码分析和示例

管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例 本章,我们对java 管道进行学习. java 管道介绍 在java中,PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流. 它们的作用是让多线程可以通过管道进行线程间的通讯.在使用管道通信时,必须将PipedOutputStream和PipedInputStream配套使用. 使用管道通信时,大致的流程是:我们在线程A中向PipedOutputStr

java io学习(二)ByteArrayOutputStream的简介,源码分析和示例

ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream) 前面学习ByteArrayInputStream,了解了"输入流".接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream. 本章,我们会先对ByteArrayOutputStream进行介绍,在了解了它的源码之后,再通过示例来掌握如何使用它. ByteArrayOutputStream 介绍 ByteArrayOutputS

java io学习(一)ByteArrayInputStream的简介,源码分析和示例

ByteArrayInputStream的简介,源码分析和示例(包括InputStream) 我们以ByteArrayInputStream,拉开对字节类型的"输入流"的学习序幕. 本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的用法. ByteArrayInputStream 介绍 ByteArrayInputStream 是字节数组输入流.它继承于InputStream. 它包含一个内部缓冲区,该缓冲区包含从流中读取

mahout源码分析之DistributedLanczosSolver(七) 总结篇

Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 看svd算法官网上面使用的是亚马逊的云平台计算的,不过给出了svd算法的调用方式,当算出了eigenVectors后,应该怎么做呢?比如原始数据是600*60(600行,60列)的数据,计算得到的eigenVectors是24*60(其中的24是不大于rank的一个值),那么最后得到的结果应该是original_data乘以eigenVectors的转置这样就会得到一个600*24的矩阵,这样就达到了