用于收集和可视化网络拓扑的可重用django应用程序

django-netjsongraph的Python项目详细描述


django netjsongraph
========

图片::https://travis ci.org/netjson/django netjsongraph.svg
:目标:https://travis ci.org/netjson/django netjsongraph

…图片::https://coveralls.io/repos/netjson/django netjsongraph/badge.svg
:目标:https://coveralls.io/r/netjson/django netjsongraph

。图片::https://requires.io/github/netjson/django-netjsongraph/requirements.svg?branch=master
:目标:https://requires.io/github/netjson/django-netjsongraph/requirements/?branch=master
:alt:需求状态

…图片::https://badge.fury.io/py/django netjsongraph.svg
:目标:http://badge.fury.io/py/django netjsongraph

图片::https://img.shields.io/gitter/room/nw js/nw.js.svg?style=flat square
:目标:https://gitter.im/openwisp/general

----


>可重复使用的django应用程序,用于收集和可视化网络拓扑。

……图片::https://raw.githubusercontent.com/netjson/django netjsongraph/master/docs/images/visualizer.png

…图片::https://raw.githubusercontent.com/netjson/django netjsongraph/master/docs/images/admin.png

…目录::**目录**:
:反向链接:无
:深度:3

----



->当前功能
----

**网络拓扑采集器**支持不同格式:
-netjson网络图
-olsr(jsoninfo/txtinfo)
-batman-adv(jsondoc/txtinfo)
-bmx6(q6m)
-cnml 1.0
-openvpn
-可以通过基于"netjsongraph.js<;https://github.com/netjson/netjsongraph.js>;"的"指定自定义解析器"添加其他格式`_
***简单的http api**,以"netjson<;http://netjson.org>;` networkgraph*格式公开数据
***管理接口**,允许轻松管理、审核、可视化和调试拓扑及其相关数据(节点、链接)
***从多个节点接收拓扑**pology history**:允许保存可在前端查看的每个拓扑的每日快照

project goals
----

*使您可以轻松地可视化"netdiff<;https://github.com/ninuxorg/netdiff>;支持的格式的网络拓扑数据POLOGY数据通过*netjson networkgraph*格式的restful资源
*易于集成到更大的django项目中以提高可重用性
*易于通过提供抽象模型来扩展其模型(**在这一点上需要改进**)
*提供自定义或替换可视化工具(**在这一点上需要改进**)
*保持核心非常简单
*提供扩展默认行为的方法
*鼓励将新功能作为扩展发布

通过"openwisp<;http://openwisp.org>;` `项目:
`ansible-openwisp2<;https://github.com/openwisp/ansible-openwisp2>;` ` `.


确保遵循以下部分中说明的操作:`启用网络拓扑
模块<;https://github.com/openwisp/ansible-openwisp2启用网络拓扑模块代码块::shell



install development version
代码块::shell

pip安装https://github.com/netjson/django netjsongraph/tarball/master

代码块::shell

pip install-e git+git://github.com/netjson/django netjsongraph egg=django netjsongraph

有限公司de block::shell

git clone git@github.com:<;your懔fork>;/django netjsongraph.git
cd django netjsongraph
python setup.py develop


安装程序(集成到现有django项目中)
----------

``以及从"django"netjsongraph"到"已安装的应用程序"`:

…代码块::python

installed廑apps=[
需要):

…代码块::python

from django.conf.url导入include,url


from django_netjsongraph.api导入url as netjsongraph_api
from django_netjsongraph.visualizer导入url as netjsongraph_visualizer

urlpatterns=[
url(r'^api/,include(netjsongraph_api)),
url(r'',include(netjsongraph_visualizer)),
]


>创建数据库表::

./manage.py migrate

management命令opology url(显示网络拓扑的文件的url)已经添加到admin中,可以使用"update_topology"管理命令收集数据并开始播放网络图::

./manage.py update_topology

接受一个``--label``参数,该参数将用于在
拓扑标签中搜索,例如::

./manage.py update\u topology--label mytopology

``save\u snapshot``
^^^^^^^^^^^^^^^^^^^^^^^

可用于将来查看网络拓扑图::

./manage.py save_snapshot


management命令接受一个`--label``参数,该参数将用于搜索
拓扑标签,例如::

./manage.py save_snapshot--label mytopology

logging
----

egies
——


收集拓扑信息的方法主要有两种:

**fetch**策略
**receive**策略


拓扑数据将从URL获取。

当不再检测到某些链接时,它们将被直接标记为"向下"。

在post-http请求的有效负载中接收数据;
当接收到这样的请求时,首先根据
topology``键检查它的``key``参数。

强烈建议将"topology"实例的"expiration\u time"设置为"0"(秒),这样
系统的工作方式与**获取策略**一样,唯一的区别是
数据是由一个节点发送的,而不是由收集器获取的。

在多个节点上,您**应该**将"拓扑"实例的"过期时间"设置为略高于节点发送拓扑所用的时间间隔的值,只有在有一段时间未检测到链接时,才会将其标记为"关闭"。此机制允许可视化即使网络被分成几个部分,缺点是检测脱机的链接需要更长的时间。

|``名单``` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `^

+———-——+——+
**类型**:``str```
+——+——+——+
**默认值**:``none``
+——+——+——+——+——+——

表示初始化时要导入的python模块的字符串。

我们的航空公司。



^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^










=--------+
//` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `正在创建拓扑URL。

``netjsongraph ``` netjsongraph ````````````````````````````````````^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ ^ ^ ^

```````````````````````````````````````````````````````````````````````````````>如果某个链接关闭了更多天如果没有这个号码,它将被
``update\u topology``管理命令删除。


`set this to``false``将禁用此功能。

``netjsongraph\u visualizer\u css``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+——+————+————
:``str```
+——+——+————+——+
**默认值**:``netjsongraph/css/style.css``
+——+——+——+————————————————————————————————————————————————————————允许根据用户的喜好定制css。


``netjsongraph\u node\u expiration``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+——+——+——+——————+—————————————————————————————————————————————————————————————————————————————-——+
**默认值**:``false``
+——+——+——+————+——+——+

这取决于
``netjsongraph_link_expiration``是否已启用。
用整数替换``false``以启用该功能。


/>
*在django项目中创建一个目录,并将其完整路径放在``templates['dirs']``,
可以在django``settings.py``文件中找到该目录
*创建名为``netjsongraph``的子目录,并添加所有应覆盖默认``netjsongraph/*``模板的模板ates
*使用要覆盖的模板文件的相同名称创建一个模板文件

:重写`<;script>;``tag
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

下面是一个关于如何更改传递给`netjsongraph.js<;https://github.com/netjson/netjsongraph.js>;``的javascript选项的分步指南,请记住用
项目的绝对文件系统路径。

**第1步**:在`<;项目路径>;/模板/netjsongraph``

**第2步**:打开``settings.py``和edit"templates['dirs']``设置使其看起来像下面的示例:

…代码块::python

为了简洁起见,省略了所有其他行…
}
]

**第3步**:在
新的`<;项目路径>;/模板/netjsongraph/``目录中创建名为``netjsongraph script.html``的新文件,例如:

。代码块::html

<;!--<;project_path>;/templates/netjsongraph/netjsongraph-script.html-->;
<;script>;
窗口。窗口。窗口。加载netjsongraph=函数(图形){
=graph window.njg_default_url_
d3.select("svg").remove();
d3.select(".njg overlay").remove();
d3.select(".njg metadata").remove();
return d3.netjsongraph(graph,{
el:window.njg_u el_,
//netjsongraph.js的自定义ance:100,
链接强度:0.2,
};
};
window.graph=window.loadNetJsongraph();
window.initTopologyHistory(jquery);
<;/script>;

o-netjsongraph*提供了一组模型、管理类和通用视图,可由第三方应用程序导入、扩展和重用。

若要扩展*django netjsongraph*,**您不能**将其添加到"settings.installed\apps"中,但必须创建自己的应用程序(进入"settings.in安装的应用程序'``),从django netjsongraph导入基类并添加自定义项。


扩展模型
^^^^^^^^^^^^^^^^^^


此示例提供了如何扩展
*django netjsongraph*

代码块::自定义"network"应用程序的python

models.py
bstractsnapshot
来自django_netjsongraph.base.topology导入抽象拓扑
组织

class organizationmixin(models.model):
organization=models.foreignkey('organization.organization')


class meta:
abstract=true



class topology(organizationmixin,abstracttopology):
def clean(self):

这里是您自己的验证逻辑
pass


class meta(abstract topology.meta):
abstract=false



class node(abstractnode):
topology=models.foreignkey('topology')

class meta:
abstract=false



class link(abstractlink):
topology=models.foreignkey('topology')
source=models.foreignkey('node',
related戋u name='source戋link戋set')
target=models.foreignkey('node',
related_name='source_target_set')


class meta:
abstract=false


class snapshot(orgmixin,abstractsnapshot):
topology=models.foreignkey('topology.topology',on_delete=models.cascade)


class meta(abstractsnapshot.meta):
abstract=false

并向注册您的模型。

…代码块:python

拓扑管理信息)
这些是您的自定义模型
来自。模型导入链接、节点、拓扑




class拓扑管理信息(abstractTopologyAdmin):
model=topology



class nodeadmin(abstractnodeadmin):
model=node


kadmin(abstractlinkadmin):
model=link



admin.site.register(link,linkadmin)
admin.site.register(node,nodeadmin)
admin.site.register(topology,topologyadmin)

扩展api视图
^^^^^^^^^^^^^^^^^^^^^^^^^^^

从基础上讲,您可能还想尝试重用api视图:

…代码块::python

拓扑视图)



class networkcollectionview(basenetworkcollectionview):
queryset=topology.objects.filter(published=true)



class networkgraphview(basenetworkgraphview):
queryset=topology.objects.filter(published=true)


model=topology



类networkgraphhistoryview(basenetworkgraphhistoryview):
topology\u model=topology
snapshot\u model=snapshot

network collection=network collection view.as\view()
网络图=network graph view.as_view()
网络图=networkgraphhistoryview.as_view()
接收拓扑图=receivetopologyview.as_view()

api url
^^^^^^^^^^

使用"get-api-url"函数的url逻辑。把这个放到你的api"url.py"中:

…代码块:python

导入视图

urlpatterns=get_api_URL(视图)

代码块::python

topology detail view(basetopologydetailview):
topology\u model=topology


topology\u list=topologyListView.as\u view()
topology\u detail=topologydetailview.as\u view()


visualizer url
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
isualizer视图中,可以使用"get visualizer"url函数避免重复url逻辑。把这个放到可视化工具"url.py"中。代码块:python

导入视图

urlpatterns=get_visualizer_url(视图)


扩展appconfig
^^^^^^^^^^^^^^^^^^^

您可能也希望重用*django netjsongraph*的"appconfig"类:

。代码块::python

from django_netjsongraph.apps import djangonetjsongraphconfig


class myownconfig(djangonetjsongraphconfig):
name='yourapp'
label='yourapp'

installing for development地点:

…代码块::shell

sudo apt get install sqlite3 libsqlite3 dev


安装分叉回购:

……代码块::shell

git clone git://github.com/<;your懔fork>;/django netjsongraph
cd django netjsongraph/
python setup.py develop

安装测试要求:

……代码块::shell

pip install-r requirements test.txt


>创建数据库:

…代码块::shell

cd tests/
./manage.py migrate
./manage.py createsuperuser

代码块::shell

./manage.py runserver

代码块::shell

./runtests.py

contribution
----


首先,感谢您抽出时间阅读这些指南。


尝试遵循这些指南对于减少浪费和避免误解非常重要。

1.确保您的更改符合"项目目标"2。如果您发现一个bug,请发送一个带有补丁
3的失败测试。如果要添加新功能,请在
`issue tracker<;https://github.com/netjson/django netjsongraph/issues>;4中宣布您的意图。派生此repo并按照
"安装以进行开发"5中的说明进行安装。遵循"pep8,python代码的样式指南"6。编写代码
7。为代码编写测试
8。确保所有测试通过
9。确保测试覆盖率不低于90%
10。记录您的更改
11。发送拉取请求

…_ pep8,python代码的样式指南:http://www.python.org/dev/peps/pep-0008/
。_ ninux-dev邮件列表:http://ml.ninux.org/mailman/listinfo/ninux-dev

----


请参阅"更改"https://github.com/netjson/django netjsongraph/blob/master/changes.rst>;`.

许可证
-

请参阅"许可证"<;https://github.com/netjson/django-netjsongraph/blob/master/license>;`.


此项目在其源代码中捆绑了第三方javascript库:

-`d3.js(bsd-3-clause)<;https://github.com/netjson/django netjsongraph/blob/master/django netjsongraph/static/netjsongraph/lib/d3.min.js>;` `



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Play Framework 2.1中的简单搜索?   java:Springbeans的真正工作原理   java不能从字符串中提取数字   不同管道中的java共享ExecutionHandler   在Java中,如何为扩展comparator的类实现多个comparator方法?   通用混沌Java   java问题:从自定义类获取要添加到驱动程序类的形状   java如何利用HikariCP和Hibernate?   eclipse如何执行Java应用程序?   用户界面Java Swing:如何将JLabel的文本绑定到JTable选定行中的列?   java替换JPanel元素而不添加到面板的末尾?   java Sets根据action命令在按钮组中选择了特定的jradiobutton   在java中如何将从控制台添加的字符串中的元素添加到列表中   处理未在浏览器上运行的Java签名小程序   java如何在我的安卓应用程序中单击任意按钮时禁用音频音调?   编码如何在Java中将十六进制转换为utf8编码的字符串   java JSF Spring安全集成问题   java如何更正Oracle for Windows中的字符?   java Spark结构化流媒体:当前批次落后   java Hibernate根据最匹配的条件排序结果