Horizon 源码阅读(一)—— Horizon 整体介绍

2024-06-10 22:48

本文主要是介绍Horizon 源码阅读(一)—— Horizon 整体介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、写在前面

       这篇文章主要介绍一下Openstack Horizon — juno项目的整体情况,关于这方面的内容网上已经有很多相关的介绍,我在这里只作为一个知识的搬运工,把一些分散的内容加上个人的理解形成一篇介绍性博文,由于能力和时间有限,错误之处在所难免,欢迎指正!

如果转载,请保留作者信息。
邮箱地址:jpzhang.ht@gmail.com

二、Horizon介绍

      Horizon是OpenStack的一个子项目,用于提供一个Web前端控制台(称为Dashboard),以此来展示OpenStack的功 能。通常情况下,我们都是从Horizon、Dashboard开始来了解OpenStack的。实际上,Horizon并不会为OpenStack添加任何一个新的功能,它只是使用了OpenStack部分API功能,因此,我们可以扩展Horizon的功能,扩展Dashboard。

      Horizon是基于django webframework开发的标准的python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizon可以说高度match了django的设计风格。

     先说一点web开发的常识,网站程序基本有三部分组成,业务逻辑代码(Python),静态文件(js/css),模板(Python中的 jinja,mako,nodejs中有jade), 用户向webserver发起请求之后,server程序找到当前url对应的模板,填充模板变量(输出成字符串形式的html源码),返回给浏览器,浏览器渲染页面。

     如果是简单的程序,一个页面就对应一个模板,非常简单。一般一个网站有自己的统一风格,所有页面都会有一些相同的元素,每个页面单独写一遍很累赘,也不好维护,所以一般模板语言都有继承(extend),插入(include)等特性,来提高页面的复用率。

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

     简单总结Horizon的特点:

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

三、深入Horizon

       1、整体结构

       Horizon这套面板的设计分成三层:Dashboard -> PanelGroup -> Panel

(1)、project 普通用户登陆后看到的项目面板
(2)、admin 管理登陆后可见,左侧的管理员面板
(3)、settings 右上角的设置面板,里面可设置语言,时区,更改密码
(4)、identity  不同的角色登陆之后,左侧的“身份”面板,可设置项目用户
(5)、router ciso nexus 1000v的管理面板

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

2、项目结构

     Horizon的源码中,包含两个代码文件夹

1、horizon

2、openstack_dashboard

      Horizon这个包是一些在django基础上写的通用组件,表格(table),标签页(tab),表单(form),面包屑导航 (browser),工作流(workflow),这些代码和openstack的具体业务逻辑没有什么关系,如果做一个新的django项目,理论上可以复用Horizon这个包中的代码。horizon/base.py中还实现了一套dashboard/panel机制,使得Horizon面板上所有的dashboard都是”可插拔”的,所有的panel都是”动态加载”的。

      openstack_dashboard/dashboards/中是各个面板的具体实现代码,其中包括各个面板的模板文件, 和后端service交互的业务逻辑代码等。

以下对重要目录做一个介绍,有些目录目前还没有接触到还不清楚具体的作用:

horizon

             ./doc: horizon相关帮助性文档

             ./horizon:horizon通用组件库

                                ./browsers:

                                ./conf:Horizon配置文件

                                ./contrib:

                                ./forms:form表单基类包

                               ./locale:国际化语言包

                               ./management:manage.py startdash/startpanel命令

                               ./static:horizon静态文件包

                               ./tables:table基类包

                               ./tabs:tab基类包

                               ./templates:模板文件基类

                               ./templatetags:模板标签基类

                               ./test:测试包

                               ./utils:工具包

                               ./workflows:工作流机制包

             ./openstack_dashboard:horizon各个面板的具体实现代码

                             ./api:调用nova、swift、glance等接口封装

                             ./conf:nova、cinder等API访问权限控制,叫 xxx_policy.json,里  面定义了鉴权用的rules。

                            ./dashboards:Horizon界面展示各个模块实现目录。

./admin:管理员界面

./instances:云主机管理界面

 ./templates:云主机html界面模板

./forms.py:form表单实现

./panel.py:实现panel注册到dashbord

./tables.py:table实现

./tests.py:测试

./urls.py:url映射

./views.py:url映射的视图

…...

./identity:项目、用户管理界面

./project:普通用户项目界面

./router:

./settings:设置界面

                            ./django_pyscss_fix:

                             ./enabled:控制导航加载哪些模块显示出来。

                             ./local:本地配置文件

                             ./locale:本地国家化语言包

                             ./management:定义安装apache、horizon等是配置文件的

                                                         模板文件。

                             ./openstack:log、_i18n等包

                             ./static:horizon静态包

                            ./templates:horizon模板包

                             ./templatetags:horizon模板标签包

                             ./test:测试包

                             ./usage:Horizon概况页面资源统计实现包

                             ./utils:工具包

                             ./wsgi:wsgi包

             ./tool: horizon工具包

             ./manage.py :

参考资料:http://www.cnblogs.com/yuxc/p/3419102.html

这篇关于Horizon 源码阅读(一)—— Horizon 整体介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049491

相关文章

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数