├── .gitattributes ├── .idea ├── cmdb.iml ├── deployment.xml ├── inspectionProfiles │ └── Project_Default.xml ├── misc.xml ├── modules.xml ├── preferred-vcs.xml ├── vcs.xml ├── webServers.xml └── workspace.xml ├── README.md ├── _config.yml ├── cmdb ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-35.pyc │ ├── __init__.cpython-36.pyc │ ├── settings.cpython-35.pyc │ ├── settings.cpython-36.pyc │ ├── urls.cpython-35.pyc │ ├── urls.cpython-36.pyc │ ├── wsgi.cpython-35.pyc │ └── wsgi.cpython-36.pyc ├── settings.py ├── urls.py └── wsgi.py ├── db.sqlite3 ├── hostinfo ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-35.pyc │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-35.pyc │ ├── admin.cpython-36.pyc │ ├── models.cpython-35.pyc │ ├── models.cpython-36.pyc │ ├── tests.cpython-35.pyc │ ├── tests.cpython-36.pyc │ ├── urls.cpython-35.pyc │ ├── urls.cpython-36.pyc │ ├── views.cpython-35.pyc │ └── views.cpython-36.pyc ├── admin.py ├── ansible_runner │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-35.pyc │ │ ├── __init__.cpython-36.pyc │ │ ├── runner.cpython-35.pyc │ │ └── runner.cpython-36.pyc │ ├── callback.py │ ├── cmd.yml │ ├── inventorys.py │ └── runner.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_auto_20170810_1436.py │ ├── 0003_auto_20170823_1506.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-36.pyc │ │ ├── 0002_auto_20170810_1436.cpython-36.pyc │ │ ├── 0003_auto_20170823_1506.cpython-36.pyc │ │ └── __init__.cpython-36.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── index ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-35.pyc │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-35.pyc │ ├── admin.cpython-36.pyc │ ├── apps.cpython-35.pyc │ ├── models.cpython-35.pyc │ ├── models.cpython-36.pyc │ ├── urls.cpython-35.pyc │ ├── views.cpython-35.pyc │ └── views.cpython-36.pyc ├── admin.py ├── apps.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── install_redis.sh ├── install_webssh.sh ├── jigui ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-35.pyc │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-35.pyc │ ├── admin.cpython-36.pyc │ ├── apps.cpython-35.pyc │ ├── apps.cpython-36.pyc │ ├── models.cpython-35.pyc │ ├── models.cpython-36.pyc │ ├── urls.cpython-35.pyc │ ├── urls.cpython-36.pyc │ ├── views.cpython-35.pyc │ └── views.cpython-36.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-36.pyc │ │ └── __init__.cpython-36.pyc ├── models.py ├── tests.py ├── urls.py └── views.py ├── manage.py ├── requirements.txt ├── sh ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-35.pyc │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-35.pyc │ ├── admin.cpython-36.pyc │ ├── models.cpython-35.pyc │ ├── models.cpython-36.pyc │ ├── tasks.cpython-36.pyc │ ├── urls.cpython-35.pyc │ ├── urls.cpython-36.pyc │ ├── views.cpython-35.pyc │ └── views.cpython-36.pyc ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-36.pyc │ │ └── __init__.cpython-36.pyc ├── models.py ├── shell │ ├── 1.sh │ └── test.sh ├── tasks.py ├── tests.py ├── urls.py └── views.py ├── static ├── css │ ├── animate.css │ ├── bootstrap.min.css │ ├── patterns │ │ ├── 3.png │ │ ├── 4.png │ │ ├── header-profile-skin-1.png │ │ ├── header-profile-skin-2.png │ │ ├── header-profile-skin-3.png │ │ ├── header-profile.png │ │ └── shattered.png │ ├── plugins │ │ ├── awesome-bootstrap-checkbox │ │ │ └── awesome-bootstrap-checkbox.css │ │ ├── blueimp │ │ │ ├── css │ │ │ │ └── blueimp-gallery.min.css │ │ │ └── img │ │ │ │ ├── error.png │ │ │ │ ├── error.svg │ │ │ │ ├── loading.gif │ │ │ │ ├── play-pause.png │ │ │ │ ├── play-pause.svg │ │ │ │ ├── video-play.png │ │ │ │ └── video-play.svg │ │ ├── bootstrap-markdown │ │ │ └── bootstrap-markdown.min.css │ │ ├── bootstrapTour │ │ │ └── bootstrap-tour.min.css │ │ ├── c3 │ │ │ └── c3.min.css │ │ ├── chartist │ │ │ └── chartist.min.css │ │ ├── chosen │ │ │ ├── chosen-sprite.png │ │ │ ├── chosen-sprite@2x.png │ │ │ └── chosen.css │ │ ├── clockpicker │ │ │ └── clockpicker.css │ │ ├── codemirror │ │ │ ├── ambiance.css │ │ │ └── codemirror.css │ │ ├── colorpicker │ │ │ └── bootstrap-colorpicker.min.css │ │ ├── cropper │ │ │ └── cropper.min.css │ │ ├── dataTables │ │ │ └── datatables.min.css │ │ ├── datapicker │ │ │ └── datepicker3.css │ │ ├── daterangepicker │ │ │ └── daterangepicker-bs3.css │ │ ├── dropzone │ │ │ ├── basic.css │ │ │ └── dropzone.css │ │ ├── footable │ │ │ ├── fonts │ │ │ │ ├── footable.eot │ │ │ │ ├── footable.svg │ │ │ │ ├── footable.ttf │ │ │ │ └── footable.woff │ │ │ └── footable.core.css │ │ ├── fullcalendar │ │ │ ├── fullcalendar.css │ │ │ └── fullcalendar.print.css │ │ ├── iCheck │ │ │ ├── custom.css │ │ │ ├── green.png │ │ │ └── green@2x.png │ │ ├── images │ │ │ ├── bootstrap-colorpicker │ │ │ │ ├── alpha-horizontal.png │ │ │ │ ├── alpha.png │ │ │ │ ├── hue-horizontal.png │ │ │ │ ├── hue.png │ │ │ │ └── saturation.png │ │ │ ├── sprite-skin-flat.png │ │ │ ├── spritemap.png │ │ │ └── spritemap@2x.png │ │ ├── ionRangeSlider │ │ │ ├── ion.rangeSlider.css │ │ │ └── ion.rangeSlider.skinFlat.css │ │ ├── jQueryUI │ │ │ ├── images │ │ │ │ ├── animated-overlay.gif │ │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ ├── jquery-ui-1.10.4.custom.min.css │ │ │ └── jquery-ui.css │ │ ├── jasny │ │ │ └── jasny-bootstrap.min.css │ │ ├── jqGrid │ │ │ └── ui.jqgrid.css │ │ ├── jsTree │ │ │ ├── 32px.png │ │ │ ├── 40px.png │ │ │ ├── style.min.css │ │ │ └── throbber.gif │ │ ├── ladda │ │ │ └── ladda-themeless.min.css │ │ ├── morris │ │ │ └── morris-0.4.3.min.css │ │ ├── nouslider │ │ │ └── jquery.nouislider.css │ │ ├── select2 │ │ │ └── select2.min.css │ │ ├── slick │ │ │ ├── ajax-loader.gif │ │ │ ├── fonts │ │ │ │ ├── slick.eot │ │ │ │ ├── slick.svg │ │ │ │ ├── slick.ttf │ │ │ │ └── slick.woff │ │ │ ├── slick-theme.css │ │ │ └── slick.css │ │ ├── steps │ │ │ └── jquery.steps.css │ │ ├── summernote │ │ │ ├── summernote-bs3.css │ │ │ └── summernote.css │ │ ├── sweetalert │ │ │ └── sweetalert.css │ │ ├── switchery │ │ │ └── switchery.css │ │ ├── toastr │ │ │ └── toastr.min.css │ │ └── touchspin │ │ │ └── jquery.bootstrap-touchspin.min.css │ └── style.css ├── font-awesome │ ├── css │ │ ├── font-awesome.css │ │ └── font-awesome.min.css │ └── fonts │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── img │ ├── 1.png │ ├── 10.png │ ├── 111.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ ├── group.png │ └── profile_small.jpg └── js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── echarts.min.js │ ├── inspinia.js │ ├── jquery-2.1.1.js │ ├── jquery-ui-1.10.4.min.js │ ├── jquery-ui.custom.min.js │ └── plugins │ ├── blueimp │ └── jquery.blueimp-gallery.min.js │ ├── bootstrap-markdown │ ├── bootstrap-markdown.js │ └── markdown.js │ ├── bootstrapTour │ └── bootstrap-tour.min.js │ ├── c3 │ └── c3.min.js │ ├── chartJs │ └── Chart.min.js │ ├── chartist │ └── chartist.min.js │ ├── chosen │ └── chosen.jquery.js │ ├── clipboard │ └── clipboard.min.js │ ├── clockpicker │ └── clockpicker.js │ ├── codemirror │ ├── codemirror.js │ └── mode │ │ └── javascript │ │ └── javascript.js │ ├── colorpicker │ └── bootstrap-colorpicker.min.js │ ├── cropper │ └── cropper.min.js │ ├── d3 │ └── d3.min.js │ ├── dataTables │ └── datatables.min.js │ ├── datapicker │ └── bootstrap-datepicker.js │ ├── daterangepicker │ └── daterangepicker.js │ ├── diff_match_patch │ └── javascript │ │ └── diff_match_patch.js │ ├── dotdotdot │ └── jquery.dotdotdot.min.js │ ├── dropzone │ └── dropzone.js │ ├── easypiechart │ └── jquery.easypiechart.js │ ├── flot │ ├── curvedLines.js │ ├── jquery.flot.js │ ├── jquery.flot.pie.js │ ├── jquery.flot.resize.js │ ├── jquery.flot.spline.js │ ├── jquery.flot.symbol.js │ ├── jquery.flot.time.js │ └── jquery.flot.tooltip.min.js │ ├── footable │ └── footable.all.min.js │ ├── fullcalendar │ ├── fullcalendar.min.js │ └── moment.min.js │ ├── gritter │ ├── images │ │ ├── gritter-light.png │ │ ├── gritter.png │ │ └── ie-spacer.gif │ ├── jquery.gritter.css │ └── jquery.gritter.min.js │ ├── i18next │ └── i18next.min.js │ ├── iCheck │ └── icheck.min.js │ ├── idle-timer │ └── idle-timer.min.js │ ├── ionRangeSlider │ └── ion.rangeSlider.min.js │ ├── jasny │ └── jasny-bootstrap.min.js │ ├── jeditable │ └── jquery.jeditable.js │ ├── jqGrid │ ├── i18n │ │ └── grid.locale-en.js │ └── jquery.jqGrid.min.js │ ├── jquery-ui │ └── jquery-ui.min.js │ ├── jsKnob │ └── jquery.knob.js │ ├── jsTree │ └── jstree.min.js │ ├── jvectormap │ ├── jquery-jvectormap-2.0.2.min.js │ └── jquery-jvectormap-world-mill-en.js │ ├── ladda │ ├── ladda.jquery.min.js │ ├── ladda.min.js │ └── spin.min.js │ ├── masonary │ └── masonry.pkgd.min.js │ ├── metisMenu │ └── jquery.metisMenu.js │ ├── morris │ ├── morris.js │ └── raphael-2.1.0.min.js │ ├── nestable │ └── jquery.nestable.js │ ├── nouslider │ └── jquery.nouislider.min.js │ ├── pace │ └── pace.min.js │ ├── peity │ └── jquery.peity.min.js │ ├── preetyTextDiff │ └── jquery.pretty-text-diff.min.js │ ├── rickshaw │ ├── rickshaw.min.js │ └── vendor │ │ └── d3.v3.js │ ├── select2 │ └── select2.full.min.js │ ├── slick │ └── slick.min.js │ ├── slimscroll │ └── jquery.slimscroll.min.js │ ├── sparkline │ └── jquery.sparkline.min.js │ ├── staps │ └── jquery.steps.min.js │ ├── summernote │ └── summernote.min.js │ ├── sweetalert │ └── sweetalert.min.js │ ├── switchery │ └── switchery.js │ ├── tinycon │ └── tinycon.min.js │ ├── toastr │ └── toastr.min.js │ ├── touchspin │ └── jquery.bootstrap-touchspin.min.js │ ├── validate │ └── jquery.validate.min.js │ ├── video │ └── responsible-video.js │ └── wow │ └── wow.min.js ├── supervisor.conf └── templates ├── base.html ├── error.html ├── foot_script.html ├── footer.html ├── host ├── cmd.html ├── history.html ├── host.html └── show.html ├── index.html ├── jigui ├── add.html ├── jigui.html ├── jiguiedit.html ├── show.html └── xiangxi.html ├── link_css.html ├── login.html ├── nav.html ├── navbar-static-top.html └── sh ├── sh.html ├── shadd.html ├── shedit.html ├── shell.html └── shinfo.html /.gitattributes: -------------------------------------------------------------------------------- 1 | *.css linguist-language=python 2 | *.js linguist-language=python 3 | *.html linguist-language=python -------------------------------------------------------------------------------- /.idea/cmdb.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 26 | 27 | 29 | -------------------------------------------------------------------------------- /.idea/deployment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/preferred-vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ApexVCS 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/webServers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /cmdb/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__init__.py -------------------------------------------------------------------------------- /cmdb/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/settings.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/settings.cpython-35.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/settings.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/settings.cpython-36.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/wsgi.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/wsgi.cpython-35.pyc -------------------------------------------------------------------------------- /cmdb/__pycache__/wsgi.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/cmdb/__pycache__/wsgi.cpython-36.pyc -------------------------------------------------------------------------------- /cmdb/urls.py: -------------------------------------------------------------------------------- 1 | """cmdb URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | from django.conf.urls import url, include 17 | from django.contrib import admin 18 | from index.views import index, login_view, logout, error 19 | from django.conf.urls import handler404, handler500 20 | 21 | urlpatterns = [ 22 | url(r'^admin/', admin.site.urls), 23 | url(r'^$', index), 24 | url(r'^index/$', index), 25 | url(r'^index.html$', index), 26 | url(r'^jigui/', include('jigui.urls')), 27 | url(r'^login.html$', login_view), 28 | url(r'^login/$', login_view), 29 | url(r'^logout.html$', logout), 30 | url(r'^error.html$', error), 31 | url(r'^host/', include('hostinfo.urls')), 32 | url(r'^sh/', include('sh.urls')), 33 | ] 34 | -------------------------------------------------------------------------------- /cmdb/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for cmdb project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cmdb.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/db.sqlite3 -------------------------------------------------------------------------------- /hostinfo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__init__.py -------------------------------------------------------------------------------- /hostinfo/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/admin.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/admin.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/admin.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/admin.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/models.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/models.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/tests.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/tests.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/tests.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/tests.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/views.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/views.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from hostinfo.models import Host,History,Business,Monitor 3 | 4 | class HostAdmin(admin.ModelAdmin): 5 | search_fields = ('hostname','ip',) ## 定义搜索框以哪些字段可以搜索 6 | list_display = ('hostname','ip','osversion','disk','beizhu')# 每行的显示信息 7 | list_display_links = ('hostname',) 8 | list_filter = ('jifang',) 9 | class Historyinfo(admin.ModelAdmin): 10 | search_fields = ('user','ip','cmd') ## 定义搜索框以哪些字段可以搜索 11 | list_display = ('user','ip','cmd','root')# 每行的显示信息 12 | list_display_links = ('user',) 13 | list_filter = ('user','ip') 14 | 15 | admin.site.register(Host,HostAdmin) 16 | admin.site.register(History,Historyinfo) 17 | admin.site.register(Business) 18 | admin.site.register(Monitor) -------------------------------------------------------------------------------- /hostinfo/ansible_runner/__init__.py: -------------------------------------------------------------------------------- 1 | # ~*~ coding: utf-8 ~*~ 2 | # import sys 3 | # sys.path.append('hostinfo/ansible_runner/') 4 | # from .callback import * 5 | # from .inventorys import * 6 | # from .runner import * 7 | 8 | -------------------------------------------------------------------------------- /hostinfo/ansible_runner/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/ansible_runner/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/ansible_runner/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/ansible_runner/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/ansible_runner/__pycache__/runner.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/ansible_runner/__pycache__/runner.cpython-35.pyc -------------------------------------------------------------------------------- /hostinfo/ansible_runner/__pycache__/runner.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/ansible_runner/__pycache__/runner.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/ansible_runner/cmd.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: all #hosts中指定 3 | 4 | tasks: 5 | - name: "ntpdate" #- name:任务名称,下面是任务过程 6 | shell: 'ntpdate time.nist.gov' -------------------------------------------------------------------------------- /hostinfo/ansible_runner/inventorys.py: -------------------------------------------------------------------------------- 1 | # ~*~ coding: utf-8 ~*~ 2 | 3 | from ansible.inventory import Inventory, Host, Group 4 | from ansible.vars import VariableManager 5 | from ansible.parsing.dataloader import DataLoader 6 | 7 | 8 | 9 | 10 | class JMSHost(Host): 11 | def __init__(self, asset): 12 | self.asset = asset 13 | self.name = name = asset.get('hostname') or asset.get('ip') 14 | self.port = port = asset.get('port') or 22 15 | super(JMSHost, self).__init__(name, port) 16 | self.set_all_variable() 17 | 18 | def set_all_variable(self): 19 | asset = self.asset 20 | self.set_variable('ansible_host', asset['ip']) 21 | self.set_variable('ansible_port', asset['port']) 22 | self.set_variable('ansible_user', asset['username']) 23 | 24 | # 添加密码和秘钥 25 | if asset.get('password'): 26 | self.set_variable('ansible_ssh_pass', asset['password']) 27 | if asset.get('private_key'): 28 | self.set_variable('ansible_ssh_private_key_file', asset['private_key']) 29 | 30 | # 添加become支持 31 | become = asset.get("become", False) 32 | if become: 33 | self.set_variable("ansible_become", True) 34 | self.set_variable("ansible_become_method", become.get('method', 'sudo')) 35 | self.set_variable("ansible_become_user", become.get('user', 'root')) 36 | self.set_variable("ansible_become_pass", become.get('pass', '')) 37 | else: 38 | self.set_variable("ansible_become", False) 39 | 40 | 41 | class JMSInventory(Inventory): 42 | """ 43 | 提供生成Ansible inventory对象的方法 44 | """ 45 | 46 | def __init__(self, host_list=None): 47 | if host_list is None: 48 | host_list = [] 49 | assert isinstance(host_list, list) 50 | self.host_list = host_list 51 | self.loader = DataLoader() 52 | self.variable_manager = VariableManager() 53 | super(JMSInventory, self).__init__(self.loader, self.variable_manager, 54 | host_list=host_list) 55 | 56 | def parse_inventory(self, host_list): 57 | """用于生成动态构建Ansible Inventory. 58 | self.host_list: [ 59 | {"name": "asset_name", 60 | "ip": , 61 | "port": , 62 | "user": , 63 | "pass": , 64 | "key": , 65 | "groups": ['group1', 'group2'], 66 | "other_host_var": }, 67 | {...}, 68 | ] 69 | 70 | :return: 返回一个Ansible的inventory对象 71 | """ 72 | 73 | # TODO: 验证输入 74 | # 创建Ansible Group,如果没有则创建default组 75 | ungrouped = Group('ungrouped') 76 | all = Group('all') 77 | all.add_child_group(ungrouped) 78 | self.groups = dict(all=all, ungrouped=ungrouped) 79 | 80 | for asset in host_list: 81 | host = JMSHost(asset=asset) 82 | asset_groups = asset.get('groups') 83 | if asset_groups: 84 | for group_name in asset_groups: 85 | if group_name not in self.groups: 86 | group = Group(group_name) 87 | self.groups[group_name] = group 88 | else: 89 | group = self.groups[group_name] 90 | group.add_host(host) 91 | else: 92 | ungrouped.add_host(host) 93 | all.add_host(host) 94 | 95 | -------------------------------------------------------------------------------- /hostinfo/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | class HostinfoConfig(AppConfig): 4 | name = 'hostinfo' 5 | -------------------------------------------------------------------------------- /hostinfo/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.3 on 2017-08-10 14:10 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | initial = True 12 | 13 | dependencies = [ 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='Business', 19 | fields=[ 20 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 21 | ('caption', models.CharField(max_length=32, null=True, verbose_name='机房')), 22 | ], 23 | options={ 24 | 'verbose_name': '机房组', 25 | 'verbose_name_plural': '机房组', 26 | 'db_table': 'Business', 27 | }, 28 | ), 29 | migrations.CreateModel( 30 | name='History', 31 | fields=[ 32 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 33 | ('root', models.CharField(max_length=50, null=True, verbose_name='用户')), 34 | ('ip', models.GenericIPAddressField(null=True, verbose_name='IP')), 35 | ('port', models.CharField(max_length=50, null=True, verbose_name='端口')), 36 | ('cmd', models.CharField(max_length=50, null=True, verbose_name='命令')), 37 | ('user', models.CharField(max_length=50, null=True, verbose_name='操作者')), 38 | ('ctime', models.DateTimeField(auto_now_add=True, null=True, verbose_name='时间')), 39 | ], 40 | options={ 41 | 'verbose_name': '历史命令', 42 | 'verbose_name_plural': '历史命令', 43 | 'db_table': 'History', 44 | }, 45 | ), 46 | migrations.CreateModel( 47 | name='Host', 48 | fields=[ 49 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 50 | ('hostname', models.CharField(max_length=50, verbose_name='主机编号')), 51 | ('ip', models.GenericIPAddressField(null=True, verbose_name='IP')), 52 | ('port', models.CharField(max_length=50, null=True, verbose_name='端口')), 53 | ('username', models.CharField(max_length=50, null=True, verbose_name='登陆用户')), 54 | ('password', models.CharField(max_length=50, null=True, verbose_name='密码')), 55 | ('osversion', models.CharField(max_length=50, null=True, verbose_name='系统版本')), 56 | ('memory', models.CharField(max_length=50, null=True, verbose_name='内存')), 57 | ('disk', models.CharField(max_length=50, null=True, verbose_name='硬盘')), 58 | ('sn', models.CharField(max_length=50, null=True, verbose_name='SN')), 59 | ('model_name', models.CharField(max_length=50, null=True, verbose_name='型号')), 60 | ('cpu_core', models.CharField(max_length=50, null=True, verbose_name='CPU')), 61 | ('beizhu', models.CharField(max_length=1000, null=True, verbose_name='备注')), 62 | ('jifang', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='hostinfo.Business', verbose_name='机房')), 63 | ], 64 | options={ 65 | 'verbose_name': '服务器', 66 | 'verbose_name_plural': '服务器', 67 | 'db_table': 'Host', 68 | }, 69 | ), 70 | migrations.CreateModel( 71 | name='Monitor', 72 | fields=[ 73 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 74 | ('cpu_use', models.CharField(max_length=32, null=True, verbose_name='CPU使用率')), 75 | ('mem_use', models.CharField(max_length=32, null=True, verbose_name='内存使用率')), 76 | ('in_use', models.CharField(max_length=32, null=True, verbose_name='进流量')), 77 | ('out_use', models.CharField(max_length=32, null=True, verbose_name='出流量')), 78 | ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), 79 | ('update_date', models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间')), 80 | ('server', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='hostinfo.Host')), 81 | ], 82 | options={ 83 | 'verbose_name': '监控状态', 84 | 'verbose_name_plural': '监控状态', 85 | 'db_table': 'Monitor', 86 | }, 87 | ), 88 | ] 89 | -------------------------------------------------------------------------------- /hostinfo/migrations/0002_auto_20170810_1436.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.3 on 2017-08-10 14:36 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('hostinfo', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.RemoveField( 16 | model_name='monitor', 17 | name='in_use', 18 | ), 19 | migrations.RemoveField( 20 | model_name='monitor', 21 | name='out_use', 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /hostinfo/migrations/0003_auto_20170823_1506.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.3 on 2017-08-23 15:06 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('hostinfo', '0002_auto_20170810_1436'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='monitor', 17 | name='in_use', 18 | field=models.CharField(max_length=32, null=True, verbose_name='进流量'), 19 | ), 20 | migrations.AddField( 21 | model_name='monitor', 22 | name='out_use', 23 | field=models.CharField(max_length=32, null=True, verbose_name='出流量'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /hostinfo/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/migrations/__init__.py -------------------------------------------------------------------------------- /hostinfo/migrations/__pycache__/0001_initial.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/migrations/__pycache__/0001_initial.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/migrations/__pycache__/0002_auto_20170810_1436.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/migrations/__pycache__/0002_auto_20170810_1436.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/migrations/__pycache__/0003_auto_20170823_1506.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/migrations/__pycache__/0003_auto_20170823_1506.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/migrations/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/migrations/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /hostinfo/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | 5 | class Host(models.Model): 6 | hostname = models.CharField(max_length=50, verbose_name='主机编号') 7 | ip = models.GenericIPAddressField(verbose_name='IP',null=True) 8 | port = models.CharField(max_length=50, verbose_name='端口',null=True) 9 | username = models.CharField(max_length=50, verbose_name='登陆用户',null=True) 10 | password = models.CharField(max_length=50, verbose_name='密码',null=True) 11 | jifang = models.ForeignKey(to="Business", to_field='id', null=True,verbose_name='机房') 12 | 13 | osversion = models.CharField(max_length=50,verbose_name='系统版本',null=True) 14 | memory = models.CharField(max_length=50,verbose_name='内存',null=True) 15 | disk = models.CharField(max_length=50,verbose_name='硬盘',null=True) 16 | sn = models.CharField(max_length=50, verbose_name='SN', null=True) 17 | model_name = models.CharField(max_length=50, verbose_name='型号', null=True) 18 | cpu_core = models.CharField(max_length=50, verbose_name='CPU', null=True) 19 | beizhu = models.CharField(max_length=1000, verbose_name='备注', null=True) 20 | 21 | 22 | class Meta: 23 | db_table ="Host" 24 | verbose_name="服务器" 25 | verbose_name_plural = '服务器' 26 | 27 | 28 | def __str__(self): 29 | return self.hostname 30 | 31 | 32 | class History(models.Model): 33 | root = models.CharField(max_length=50, verbose_name='用户', null=True) 34 | ip = models.GenericIPAddressField(verbose_name='IP',null=True) 35 | port = models.CharField(max_length=50,verbose_name='端口',null=True) 36 | cmd = models.CharField(max_length=50,verbose_name='命令',null=True) 37 | user = models.CharField(max_length=50,verbose_name='操作者',null=True) 38 | ctime = models.DateTimeField(auto_now_add=True, null=True, verbose_name='时间') 39 | 40 | class Meta: 41 | db_table ="History" 42 | verbose_name="历史命令" 43 | verbose_name_plural = '历史命令' 44 | 45 | 46 | def __str__(self): 47 | return self.user 48 | 49 | class Business(models.Model): 50 | caption = models.CharField(max_length=32, verbose_name='机房', null=True) 51 | # code = models.CharField(max_length=32, null=True, default="SA", verbose_name='产品线', ) 52 | 53 | class Meta: 54 | db_table = "Business" 55 | verbose_name = "机房组" 56 | verbose_name_plural = '机房组' 57 | 58 | def __str__(self): 59 | return self.caption 60 | 61 | 62 | # class Cpu(models.Model): 63 | # # host = models.OneToOneField('Host') 一条记录 64 | # server = models.ForeignKey('Host') 65 | # cpu_model = models.CharField(verbose_name='CPU型号', max_length=128,null=True) 66 | # cpu_count = models.SmallIntegerField(verbose_name='物理CPU个数',null=True) 67 | # cpu_core_count = models.SmallIntegerField(verbose_name='CPU核心数',null=True) 68 | # use = models.CharField(verbose_name='使用率',max_length=32,null=True) 69 | # memo = models.TextField(verbose_name='备注', null=True,) 70 | # create_date = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 71 | # update_date = models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间') 72 | # 73 | # class Meta: 74 | # db_table = 'Cpu' 75 | # verbose_name = 'CPU部件' 76 | # verbose_name_plural = verbose_name 77 | # # unique_together=("host","cpu_model") 联合唯一 78 | # 79 | # def __str__(self): 80 | # return self.cpu_model 81 | 82 | 83 | class Monitor(models.Model): 84 | server = models.ForeignKey('Host') 85 | cpu_use = models.CharField(verbose_name='CPU使用率',max_length=32,null=True) 86 | mem_use = models.CharField(verbose_name='内存使用率', max_length=32, null=True) 87 | in_use = models.CharField(verbose_name='进流量', max_length=32, null=True) 88 | out_use = models.CharField(verbose_name='出流量', max_length=32, null=True) 89 | 90 | create_date = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 91 | update_date = models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间') 92 | class Meta: 93 | db_table = 'Monitor' 94 | verbose_name = '监控状态' 95 | verbose_name_plural = verbose_name 96 | # unique_together=("host","cpu_model") 联合唯一 97 | 98 | def __str__(self): 99 | return self.cpu_use -------------------------------------------------------------------------------- /hostinfo/tests.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/hostinfo/tests.py -------------------------------------------------------------------------------- /hostinfo/urls.py: -------------------------------------------------------------------------------- 1 | """cmdb URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | 17 | from django.conf.urls import url 18 | from hostinfo.views import host, cmd, host_add, host_change, host_del,history,hostupdate,host_change_password,hostall_del,host_show,host_show_api,host_web_ssh,host_network_api 19 | urlpatterns = [ 20 | url(r'^host.html$', host,name="host"), 21 | url(r'^cmd.html$', cmd,name="cmd"), 22 | url(r'^hostadd$', host_add,name="host_add"), 23 | url(r'^history.html$', history,name="history"), 24 | url(r'^hostpassword$', host_change_password,name="host_change_password"), 25 | url(r'^hostchange$', host_change,name="host_change"), 26 | url(r'^hostdel$', host_del,name='host_del'), 27 | url(r'^hostupdate$', hostupdate,name="hostupdate"), 28 | url(r'^hostapi$', host_show_api,name="hostshowapi"), 29 | url(r'^host-network-api$', host_network_api,name="host_network_api"), 30 | url(r'^hostall-del.html$', hostall_del), 31 | url(r'^show-(?P\d+).html$', host_show, name='xiangxi'), 32 | url(r'^webssh$', host_web_ssh, name='webssh'), 33 | ] -------------------------------------------------------------------------------- /index/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__init__.py -------------------------------------------------------------------------------- /index/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /index/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /index/__pycache__/admin.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/admin.cpython-35.pyc -------------------------------------------------------------------------------- /index/__pycache__/admin.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/admin.cpython-36.pyc -------------------------------------------------------------------------------- /index/__pycache__/apps.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/apps.cpython-35.pyc -------------------------------------------------------------------------------- /index/__pycache__/models.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/models.cpython-35.pyc -------------------------------------------------------------------------------- /index/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /index/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /index/__pycache__/views.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/views.cpython-35.pyc -------------------------------------------------------------------------------- /index/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/index/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /index/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /index/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class IndexConfig(AppConfig): 5 | name = 'index' 6 | -------------------------------------------------------------------------------- /index/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /index/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /index/urls.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """hequan URL Configuration 4 | 5 | The `urlpatterns` list routes URLs to views. For more information please see: 6 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 7 | Examples: 8 | Function views 9 | 1. Add an import: from my_app import views 10 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 11 | Class-based views 12 | 1. Add an import: from other_app.views import Home 13 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 14 | Including another URLconf 15 | 1. Import the include() function: from django.conf.urls import url, include 16 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 17 | """ 18 | from django.conf.urls import url,include 19 | 20 | from index.views import index 21 | urlpatterns = [ 22 | 23 | ] 24 | 25 | 26 | -------------------------------------------------------------------------------- /index/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, redirect 2 | from django.contrib.auth import authenticate, login 3 | from django.contrib.auth.decorators import login_required 4 | 5 | @login_required(login_url="/login.html") 6 | def index(request): ##首页 7 | return render(request, 'index.html') 8 | 9 | def login_view(request): #登陆 10 | if request.method == "GET": 11 | error_msg = "请登录" 12 | return render(request, 'login.html', {'error_msg': error_msg, }) 13 | if request.method == "POST": 14 | u = request.POST.get("user") 15 | p = request.POST.get("password") 16 | user = authenticate(username=u, password=p) 17 | if user is not None: 18 | if user.is_active: 19 | login(request, user) 20 | request.session['user'] = u 21 | request.session['is_login'] =True 22 | return redirect('/index.html') 23 | else: 24 | error_msg1 = "用户名或密码错误,请重试" 25 | return render(request, 'login.html', {'error_msg': error_msg1,}) 26 | else: 27 | error_msg1 = "用户名或密码错误,请重试" 28 | return render(request, 'login.html', {'error_msg': error_msg1,}) 29 | 30 | 31 | 32 | def logout(requset): #退出 33 | requset.session.clear() 34 | return redirect('/login.html') 35 | 36 | 37 | 38 | @login_required(login_url="/login.html") 39 | def error(request): ##错误页面 40 | return render(request, 'error.html') 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /install_redis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | cd /opt 3 | wget http://download.redis.io/releases/redis-4.0.1.tar.gz 4 | tar zxf redis-4.0.1.tar.gz 5 | cd redis-4.0.1 6 | make 7 | 8 | 9 | -------------------------------------------------------------------------------- /install_webssh.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /opt 4 | wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz 5 | tar zxvf go1.8.1.linux-amd64.tar.gz -C /usr/local 6 | echo 'export PATH="/usr/local/go/bin:$PATH"' >> /etc/profile 7 | source /etc/profile 8 | cd /opt && git clone --recurse-submodules https://github.com/shibingli/webconsole.git && cd webconsole && git submodule update --init --recursive 9 | cd /opt/webconsole/src/apibox.club/apibox 10 | GOPATH=/opt/webconsole go install 11 | 12 | 13 | ##以下为需要修改的内容。 14 | 15 | #vim /opt/webconsole/conf/conf.json 16 | 17 | 18 | # "addr": ":9000", ##修改端口为9000 可以自定义。 我设置的为9000,如果修改成别的端口,需要修改网页。 templates/host/host.html 19 | # "enable_jsonp": true, 开启jsonp,启用跨域访问 20 | # "cors_white_list": "42.62.6.54,42.62.6.54:9000," 这里输入的地址为需要跨域访问的,添加web主机的地址。 21 | 22 | 23 | 24 | ##启动停止 25 | #/opt/webconsole/bin/apibox start | stop 26 | 27 | ##修改templates/host/host.html 28 | # 第751和767 行 的地址 和端口,修改成自己的。 29 | 30 | 31 | ##具体可以看 https://github.com/shibingli/webconsole -------------------------------------------------------------------------------- /jigui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__init__.py -------------------------------------------------------------------------------- /jigui/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/admin.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/admin.cpython-35.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/admin.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/admin.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/apps.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/apps.cpython-35.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/apps.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/apps.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/models.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/models.cpython-35.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/views.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/views.cpython-35.pyc -------------------------------------------------------------------------------- /jigui/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | 4 | from jigui.models import JiguiInfo,Jiguidx 5 | 6 | class jigui(admin.ModelAdmin): 7 | search_fields = ('name','dx','yong','dx') ## 定义搜索框以哪些字段可以搜索 8 | list_display = ('name','jq','zy','ziy','xz',)# 每行的显示信息 9 | list_display_links = ('name',) 10 | list_filter = ('yong','dx') 11 | admin.site.register(JiguiInfo,jigui) 12 | admin.site.register(Jiguidx) -------------------------------------------------------------------------------- /jigui/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | from suit.apps import DjangoSuitConfig 3 | 4 | class SuitConfig(DjangoSuitConfig): 5 | layout = 'vertical' 6 | 7 | class JiguiConfig(AppConfig): 8 | name = 'jigui' 9 | -------------------------------------------------------------------------------- /jigui/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.3 on 2017-08-10 14:10 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [ 13 | ] 14 | 15 | operations = [ 16 | migrations.CreateModel( 17 | name='Jiguidx', 18 | fields=[ 19 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 20 | ('xuan', models.CharField(max_length=64, verbose_name='多选选项')), 21 | ], 22 | options={ 23 | 'verbose_name': '多选', 24 | 'verbose_name_plural': '多选', 25 | 'db_table': 'Jiguidx', 26 | }, 27 | ), 28 | migrations.CreateModel( 29 | name='JiguiInfo', 30 | fields=[ 31 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 32 | ('name', models.CharField(max_length=64, verbose_name='名字')), 33 | ('jq', models.CharField(max_length=64, verbose_name='总数')), 34 | ('zy', models.CharField(max_length=64, null=True, verbose_name='自用')), 35 | ('ziy', models.CharField(max_length=64, null=True, verbose_name='在用')), 36 | ('zs', models.CharField(max_length=64, null=True, verbose_name='自用')), 37 | ('zb', models.CharField(max_length=64, null=True, verbose_name='在售')), 38 | ('sh', models.CharField(max_length=64, null=True, verbose_name='整包')), 39 | ('xz', models.CharField(max_length=64, null=True, verbose_name='闲置')), 40 | ('yong', models.BooleanField(verbose_name='是否在用')), 41 | ('ctime', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')), 42 | ('utime', models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间')), 43 | ('dx', models.ManyToManyField(to='jigui.Jiguidx', verbose_name='多选')), 44 | ], 45 | options={ 46 | 'verbose_name': '机柜', 47 | 'verbose_name_plural': '机柜中心', 48 | 'db_table': 'JiguiInfo', 49 | }, 50 | ), 51 | ] 52 | -------------------------------------------------------------------------------- /jigui/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/migrations/__init__.py -------------------------------------------------------------------------------- /jigui/migrations/__pycache__/0001_initial.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/migrations/__pycache__/0001_initial.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/migrations/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/jigui/migrations/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /jigui/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class JiguiInfo(models.Model): 5 | #jifang_group = models.ForeignKey("index.JifangGroup", to_field='uid',default=1) ##用户组表,默认id user_group_id 数字 6 | name = models.CharField(max_length=64, verbose_name='名字') 7 | jq = models.CharField(max_length=64,verbose_name='总数') 8 | zy = models.CharField(max_length=64,verbose_name='自用',null=True) 9 | ziy = models.CharField(max_length=64,verbose_name='在用',null=True) 10 | zs = models.CharField(max_length=64,verbose_name='自用',null=True) 11 | zb = models.CharField(max_length=64,verbose_name='在售',null=True) 12 | sh = models.CharField(max_length=64,verbose_name='整包',null=True) 13 | xz = models.CharField(max_length=64,verbose_name='闲置',null=True) 14 | 15 | dx = models.ManyToManyField(to="Jiguidx",verbose_name='多选') 16 | yong = models.BooleanField(verbose_name='是否在用') 17 | 18 | ctime= models.DateTimeField(auto_now_add=True,null=True,verbose_name='创建时间') 19 | utime = models.DateTimeField(auto_now=True, null=True,verbose_name='更新时间') 20 | 21 | class Meta: 22 | db_table ="JiguiInfo" 23 | verbose_name="机柜" 24 | verbose_name_plural = '机柜中心' 25 | 26 | 27 | def __str__(self): 28 | return self.name 29 | 30 | 31 | class Jiguidx(models.Model): 32 | xuan = models.CharField(max_length=64,verbose_name='多选选项') 33 | 34 | class Meta: 35 | db_table ="Jiguidx" 36 | verbose_name="多选" 37 | verbose_name_plural = '多选' 38 | def __str__(self): 39 | return self.xuan 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /jigui/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | 5 | -------------------------------------------------------------------------------- /jigui/urls.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """hequan URL Configuration 4 | 5 | The `urlpatterns` list routes URLs to views. For more information please see: 6 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 7 | Examples: 8 | Function views 9 | 1. Add an import: from my_app import views 10 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 11 | Class-based views 12 | 1. Add an import: from other_app.views import Home 13 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 14 | Including another URLconf 15 | 1. Import the include() function: from django.conf.urls import url, include 16 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 17 | """ 18 | 19 | from django.conf.urls import url,include 20 | 21 | 22 | from jigui.views import jigui, xiangxi, add, jigui_del,jigui_edit,show,delete_jigui,showapi 23 | 24 | 25 | urlpatterns = [ 26 | url(r'^$',jigui,name='jigui'), 27 | url(r'^jigui.html$', jigui,name='jigui'), 28 | url(r'^show.html$', show,name='show'), 29 | url(r'^showapi$', showapi ,name='showapi'), 30 | url(r'^xiangxi-(?P\d+).html$', xiangxi,name='xiangxi'), 31 | url(r'^add.html$', add, name='addx'), 32 | url(r'^jigui-del.html$', delete_jigui), 33 | url(r'^jiguidel-(?P\d+).html$', jigui_del), 34 | url(r'^jiguiedit-(?P\d+).html$', jigui_edit), 35 | ## url(r'^home',Home.as_view()) 调用类里面的,如果是get调用get,post调用post 36 | 37 | ] 38 | 39 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cmdb.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError: 10 | # The above import may fail for some other reason. Ensure that the 11 | # issue is really that Django is missing to avoid masking other 12 | # exceptions on Python 2. 13 | try: 14 | import django 15 | except ImportError: 16 | raise ImportError( 17 | "Couldn't import Django. Are you sure it's installed and " 18 | "available on your PYTHONPATH environment variable? Did you " 19 | "forget to activate a virtual environment?" 20 | ) 21 | raise 22 | execute_from_command_line(sys.argv) 23 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | django==1.11.20 2 | ansible 3 | paramiko 4 | celery==3.1.25 5 | celery-with-redis==3.0 6 | django-celery==3.2.1 7 | django-kombu==0.9.4 8 | flower 9 | supervisor 10 | 11 | -------------------------------------------------------------------------------- /sh/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__init__.py -------------------------------------------------------------------------------- /sh/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /sh/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /sh/__pycache__/admin.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/admin.cpython-35.pyc -------------------------------------------------------------------------------- /sh/__pycache__/admin.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/admin.cpython-36.pyc -------------------------------------------------------------------------------- /sh/__pycache__/models.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/models.cpython-35.pyc -------------------------------------------------------------------------------- /sh/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /sh/__pycache__/tasks.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/tasks.cpython-36.pyc -------------------------------------------------------------------------------- /sh/__pycache__/urls.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/urls.cpython-35.pyc -------------------------------------------------------------------------------- /sh/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /sh/__pycache__/views.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/views.cpython-35.pyc -------------------------------------------------------------------------------- /sh/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /sh/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from sh.models import ToolsScript 3 | 4 | 5 | class ToolAdmin(admin.ModelAdmin): 6 | search_fields = ('name','tool_run_type') ## 定义搜索框以哪些字段可以搜索 7 | list_display = ('name','tool_run_type','comment','ctime','utime')# 每行的显示信息 8 | list_display_links = ('name',) 9 | list_filter = ('name',) 10 | 11 | 12 | admin.site.register(ToolsScript,ToolAdmin) 13 | -------------------------------------------------------------------------------- /sh/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | class ShConfig(AppConfig): 4 | name = 'sh' 5 | -------------------------------------------------------------------------------- /sh/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.3 on 2017-08-10 14:10 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [ 13 | ] 14 | 15 | operations = [ 16 | migrations.CreateModel( 17 | name='ToolsScript', 18 | fields=[ 19 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 20 | ('name', models.CharField(max_length=255, verbose_name='工具名称')), 21 | ('tool_script', models.TextField(verbose_name='脚本')), 22 | ('tool_run_type', models.IntegerField(choices=[(0, 'shell'), (1, 'python'), (2, 'yml')], default=0, verbose_name='脚本类型')), 23 | ('comment', models.TextField(blank=True, null=True, verbose_name='工具说明')), 24 | ('ctime', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')), 25 | ('utime', models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间')), 26 | ], 27 | options={ 28 | 'verbose_name': '工具', 29 | 'verbose_name_plural': '工具', 30 | 'db_table': 'ToolsScript', 31 | }, 32 | ), 33 | ] 34 | -------------------------------------------------------------------------------- /sh/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/migrations/__init__.py -------------------------------------------------------------------------------- /sh/migrations/__pycache__/0001_initial.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/migrations/__pycache__/0001_initial.cpython-36.pyc -------------------------------------------------------------------------------- /sh/migrations/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/migrations/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /sh/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | 5 | TOOL_RUN_TYPE = ( 6 | (0, 'shell'), 7 | (1, 'python'), 8 | (2, 'yml'), 9 | ) 10 | 11 | # class ToolsTypes(models.Model): 12 | # name = models.CharField(max_length=255, verbose_name='类型名称') 13 | # 14 | # def __str__(self): 15 | # return self.name 16 | # 17 | # class Meta: 18 | # verbose_name = "工具类型" 19 | # verbose_name_plural = verbose_name 20 | 21 | 22 | class ToolsScript(models.Model): 23 | name = models.CharField(max_length=255, verbose_name='工具名称') 24 | tool_script = models.TextField(verbose_name='脚本') 25 | # tools_type = models.ForeignKey(ToolsTypes, verbose_name='工具类型') 26 | # tool_run_type = models.CharField(max_length=255, verbose_name='脚本类型') 27 | tool_run_type = models.IntegerField(choices=TOOL_RUN_TYPE,verbose_name='脚本类型',default=0) 28 | comment = models.TextField(verbose_name='工具说明', null=True, blank=True) 29 | ctime = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间') 30 | utime = models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间') 31 | 32 | 33 | def __str__(self): 34 | return self.name 35 | 36 | class Meta: 37 | db_table = "ToolsScript" 38 | verbose_name = "工具" 39 | verbose_name_plural = verbose_name 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /sh/shell/1.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/shell/1.sh -------------------------------------------------------------------------------- /sh/shell/test.sh: -------------------------------------------------------------------------------- 1 | hostname -------------------------------------------------------------------------------- /sh/tasks.py: -------------------------------------------------------------------------------- 1 | import time 2 | from celery import Celery, platforms 3 | from hostinfo.models import Host,Monitor 4 | from sh.models import ToolsScript 5 | from hostinfo.views import ssh 6 | import threading,time 7 | import sys,os 8 | sys.path.append('../hostinfo/ansible_runner/') 9 | 10 | 11 | from hostinfo.ansible_runner.runner import AdHocRunner,PlayBookRunner 12 | from hostinfo.ansible_runner.callback import CommandResultCallback 13 | 14 | 15 | 16 | 17 | platforms.C_FORCE_ROOT = True 18 | 19 | app= Celery('cmdb',) 20 | 21 | @app.task 22 | def add(x, y): 23 | print(x,y) 24 | return x + y 25 | 26 | 27 | @app.task 28 | def sendmail(mail): 29 | print('sending mail to %s...' % mail['to']) 30 | time.sleep(2.0) 31 | print('mail sent.') 32 | return mail['to'] 33 | 34 | 35 | def job(id): ##计划任务 36 | 37 | i = Host.objects.filter(id=id).first() 38 | cpu1 = ssh(ip=i.ip, port=i.port, username=i.username, password=i.password, cmd=" top -bn 1 -i -c | grep Cpu ") 39 | cpu2 = cpu1['data'].split() 40 | cpu3 = cpu2[1].split('%') 41 | cpu = cpu3[0] 42 | 43 | total = ssh(ip=i.ip, port=i.port, username=i.username, password=i.password, cmd=" free | grep Mem: ") 44 | list = total['data'].split(" ") 45 | while '' in list: 46 | list.remove('') 47 | mem = float('%.2f' % (int(list[2]) / int(list[1]))) * 100 48 | 49 | in1 = ssh(ip=i.ip, port=i.port, username=i.username, password=i.password, cmd="cat /proc/net/dev | grep eth0 ") 50 | in2 = in1['data'].split() 51 | 52 | time.sleep(1) 53 | 54 | in3 = ssh(ip=i.ip, port=i.port, username=i.username, password=i.password,cmd="cat /proc/net/dev | grep eth0 ") 55 | in4 = in3['data'].split() 56 | 57 | in_network = int((int(in4[1]) - int(in2[1]))/1024/10*8) 58 | out_network = int((int(in4[9]) - int(in2[9]))/1024/10*8) 59 | Monitor.objects.create(server_id=i.id, cpu_use=cpu, mem_use=mem,in_use=in_network,out_use=out_network) 60 | 61 | 62 | 63 | @app.task 64 | def monitor_job(): 65 | object = Host.objects.all() 66 | i_list = [] 67 | for i in object: 68 | i_list.append(i.id) 69 | print(i_list) 70 | t_list = [] 71 | for i in i_list: ##循环调用 72 | t = threading.Thread(target=job, args=[i, ]) 73 | t.start() 74 | t_list.append(t) 75 | for i in t_list: 76 | i.join() 77 | print("-------------end----------------") 78 | 79 | 80 | @app.task 81 | def cmd_job(host,cmd): 82 | i = Host.objects.get(ip=host) 83 | cmd=cmd 84 | a = ssh(ip=i.ip, port=i.port, username=i.username, password=i.password, cmd=cmd) 85 | return a['data'] 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /sh/tests.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/sh/tests.py -------------------------------------------------------------------------------- /sh/urls.py: -------------------------------------------------------------------------------- 1 | """cmdb URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | from django.conf.urls import url 17 | from sh.views import sh,shadd,shedit,shinfo,shdel,shdelall,shell,shell_sh 18 | 19 | 20 | urlpatterns = [ 21 | url(r'^sh.html$', sh,name="sh"), 22 | url(r'^shadd.html$', shadd,name="sh_add"), 23 | url(r'^shedit-(?P\d+).html$', shedit,name="sh_edit"), 24 | url(r'^shinfo-(?P\d+).html$', shinfo, name="sh_info"), 25 | url(r'^shdel.html$', shdel, name="sh_del"), 26 | url(r'^shalldel.html$', shdelall, name="sh_delall"), 27 | url(r'^shell-(?P\d+).html$', shell, name="shell"), 28 | url(r'^shell.html$', shell_sh, name="shell_sh"), 29 | # url(r'^shdel$', host_del,name='host_del'), 30 | # url(r'^shupdate$', hostupdate,name="hostupdate"), 31 | # url(r'^sh-del.html$', hostall_del), 32 | # url(r'^sh-(?P\d+).html$', host_show, name='sh_info'), 33 | 34 | ] 35 | -------------------------------------------------------------------------------- /static/css/patterns/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/3.png -------------------------------------------------------------------------------- /static/css/patterns/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/4.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile-skin-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/header-profile-skin-2.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /static/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/header-profile.png -------------------------------------------------------------------------------- /static/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/patterns/shattered.png -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/blueimp/img/error.png -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/blueimp/img/loading.gif -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/play-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/blueimp/img/play-pause.png -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/play-pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/blueimp/img/video-play.png -------------------------------------------------------------------------------- /static/css/plugins/blueimp/img/video-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /static/css/plugins/bootstrap-markdown/bootstrap-markdown.min.css: -------------------------------------------------------------------------------- 1 | .md-editor{display:block;border:1px solid #ddd}.md-editor .md-footer,.md-editor>.md-header{display:block;padding:6px 4px;background:#f5f5f5}.md-editor>.md-header{margin:0}.md-editor>.md-preview{background:#fff;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;min-height:10px;overflow:auto}.md-editor>textarea{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:14px;outline:0;margin:0;display:block;padding:0;width:100%;border:0;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;border-radius:0;box-shadow:none;background:#eee}.md-editor>textarea:focus{box-shadow:none;background:#fff}.md-editor.active{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.md-editor .md-controls{float:right;padding:3px}.md-editor .md-controls .md-control{right:5px;color:#bebebe;padding:3px 3px 3px 10px}.md-editor .md-controls .md-control:hover{color:#333}.md-editor.md-fullscreen-mode{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999;padding:60px 30px 15px;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-footer{display:none}.md-editor.md-fullscreen-mode .md-input,.md-editor.md-fullscreen-mode .md-preview{margin:0 auto!important;height:100%!important;font-size:20px!important;padding:20px!important;color:#999;line-height:1.6em!important;resize:none!important;box-shadow:none!important;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-preview{color:#333;overflow:auto}.md-editor.md-fullscreen-mode .md-input:focus,.md-editor.md-fullscreen-mode .md-input:hover{color:#333;background:#fff!important}.md-editor.md-fullscreen-mode .md-header{background:0 0;text-align:center;position:fixed;width:100%;top:20px}.md-editor.md-fullscreen-mode .btn-group{float:none}.md-editor.md-fullscreen-mode .btn{border:0;background:0 0;color:#b3b3b3}.md-editor.md-fullscreen-mode .btn.active,.md-editor.md-fullscreen-mode .btn:active,.md-editor.md-fullscreen-mode .btn:focus,.md-editor.md-fullscreen-mode .btn:hover{box-shadow:none;color:#333}.md-editor.md-fullscreen-mode .md-fullscreen-controls{position:absolute;top:20px;right:20px;text-align:right;z-index:1002;display:block}.md-editor.md-fullscreen-mode .md-fullscreen-controls a{color:#b3b3b3;clear:right;margin:10px;width:30px;height:30px;text-align:center}.md-editor.md-fullscreen-mode .md-fullscreen-controls a:hover{color:#333;text-decoration:none}.md-editor.md-fullscreen-mode .md-editor{height:100%!important;position:relative}.md-editor .md-fullscreen-controls{display:none}.md-nooverflow{overflow:hidden;position:fixed;width:100%} -------------------------------------------------------------------------------- /static/css/plugins/bootstrapTour/bootstrap-tour.min.css: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * bootstrap-tour - v0.10.1 3 | * http://bootstraptour.com 4 | * ======================================================================== 5 | * Copyright 2012-2013 Ulrich Sossou 6 | * 7 | * ======================================================================== 8 | * Licensed under the Apache License, Version 2.0 (the "License"); 9 | * you may not use this file except in compliance with the License. 10 | * You may obtain a copy of the License at 11 | * 12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | * 14 | * Unless required by applicable law or agreed to in writing, software 15 | * distributed under the License is distributed on an "AS IS" BASIS, 16 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 | * See the License for the specific language governing permissions and 18 | * limitations under the License. 19 | * ======================================================================== 20 | */ 21 | 22 | .tour-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1100;background-color:#000;opacity:.8;filter:alpha(opacity=80)}.tour-step-backdrop{position:relative;z-index:1101;background:inherit}.tour-step-backdrop>td{position:relative;z-index:1101}.tour-step-background{position:absolute!important;z-index:1100;background:inherit;border-radius:6px}.popover[class*=tour-]{z-index:1100}.popover[class*=tour-] .popover-navigation{padding:9px 14px}.popover[class*=tour-] .popover-navigation [data-role=end]{float:right}.popover[class*=tour-] .popover-navigation [data-role=prev],.popover[class*=tour-] .popover-navigation [data-role=next],.popover[class*=tour-] .popover-navigation [data-role=end]{cursor:pointer}.popover[class*=tour-] .popover-navigation [data-role=prev].disabled,.popover[class*=tour-] .popover-navigation [data-role=next].disabled,.popover[class*=tour-] .popover-navigation [data-role=end].disabled{cursor:default}.popover[class*=tour-].orphan{position:fixed;margin-top:0}.popover[class*=tour-].orphan .arrow{display:none} -------------------------------------------------------------------------------- /static/css/plugins/c3/c3.min.css: -------------------------------------------------------------------------------- 1 | .c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:gray;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #CCC}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#FFF}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:none}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max,.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000} -------------------------------------------------------------------------------- /static/css/plugins/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /static/css/plugins/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /static/css/plugins/clockpicker/clockpicker.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * ClockPicker v{package.version} for Bootstrap (http://weareoutman.github.io/clockpicker/) 3 | * Copyright 2014 Wang Shenwei. 4 | * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE) 5 | */ 6 | 7 | .clockpicker .input-group-addon { 8 | cursor: pointer; 9 | } 10 | .clockpicker-moving { 11 | cursor: move; 12 | } 13 | .clockpicker-align-left.popover > .arrow { 14 | left: 25px; 15 | } 16 | .clockpicker-align-top.popover > .arrow { 17 | top: 17px; 18 | } 19 | .clockpicker-align-right.popover > .arrow { 20 | left: auto; 21 | right: 25px; 22 | } 23 | .clockpicker-align-bottom.popover > .arrow { 24 | top: auto; 25 | bottom: 6px; 26 | } 27 | .clockpicker-popover .popover-title { 28 | background-color: #fff; 29 | color: #999; 30 | font-size: 24px; 31 | font-weight: bold; 32 | line-height: 30px; 33 | text-align: center; 34 | } 35 | .clockpicker-popover .popover-title span { 36 | cursor: pointer; 37 | } 38 | .clockpicker-popover .popover-content { 39 | background-color: #f8f8f8; 40 | padding: 12px; 41 | } 42 | .popover-content:last-child { 43 | border-bottom-left-radius: 5px; 44 | border-bottom-right-radius: 5px; 45 | } 46 | .clockpicker-plate { 47 | background-color: #fff; 48 | border: 1px solid #ccc; 49 | border-radius: 50%; 50 | width: 200px; 51 | height: 200px; 52 | overflow: visible; 53 | position: relative; 54 | /* Disable text selection highlighting. Thanks to Hermanya */ 55 | -webkit-touch-callout: none; 56 | -webkit-user-select: none; 57 | -khtml-user-select: none; 58 | -moz-user-select: none; 59 | -ms-user-select: none; 60 | user-select: none; 61 | } 62 | .clockpicker-canvas, 63 | .clockpicker-dial { 64 | width: 200px; 65 | height: 200px; 66 | position: absolute; 67 | left: -1px; 68 | top: -1px; 69 | } 70 | .clockpicker-minutes { 71 | visibility: hidden; 72 | } 73 | .clockpicker-tick { 74 | border-radius: 50%; 75 | color: #666; 76 | line-height: 26px; 77 | text-align: center; 78 | width: 26px; 79 | height: 26px; 80 | position: absolute; 81 | cursor: pointer; 82 | } 83 | .clockpicker-tick.active, 84 | .clockpicker-tick:hover { 85 | background-color: rgb(192, 229, 247); 86 | background-color: rgba(0, 149, 221, .25); 87 | } 88 | .clockpicker-button { 89 | background-image: none; 90 | background-color: #fff; 91 | border-width: 1px 0 0; 92 | border-top-left-radius: 0; 93 | border-top-right-radius: 0; 94 | margin: 0; 95 | padding: 10px 0; 96 | } 97 | .clockpicker-button:hover { 98 | background-image: none; 99 | background-color: #ebebeb; 100 | } 101 | .clockpicker-button:focus { 102 | outline: none!important; 103 | } 104 | .clockpicker-dial { 105 | -webkit-transition: -webkit-transform 350ms, opacity 350ms; 106 | -moz-transition: -moz-transform 350ms, opacity 350ms; 107 | -ms-transition: -ms-transform 350ms, opacity 350ms; 108 | -o-transition: -o-transform 350ms, opacity 350ms; 109 | transition: transform 350ms, opacity 350ms; 110 | } 111 | .clockpicker-dial-out { 112 | opacity: 0; 113 | } 114 | .clockpicker-hours.clockpicker-dial-out { 115 | -webkit-transform: scale(1.2, 1.2); 116 | -moz-transform: scale(1.2, 1.2); 117 | -ms-transform: scale(1.2, 1.2); 118 | -o-transform: scale(1.2, 1.2); 119 | transform: scale(1.2, 1.2); 120 | } 121 | .clockpicker-minutes.clockpicker-dial-out { 122 | -webkit-transform: scale(.8, .8); 123 | -moz-transform: scale(.8, .8); 124 | -ms-transform: scale(.8, .8); 125 | -o-transform: scale(.8, .8); 126 | transform: scale(.8, .8); 127 | } 128 | .clockpicker-canvas { 129 | -webkit-transition: opacity 175ms; 130 | -moz-transition: opacity 175ms; 131 | -ms-transition: opacity 175ms; 132 | -o-transition: opacity 175ms; 133 | transition: opacity 175ms; 134 | } 135 | .clockpicker-canvas-out { 136 | opacity: 0.25; 137 | } 138 | .clockpicker-canvas-bearing, 139 | .clockpicker-canvas-fg { 140 | stroke: none; 141 | fill: rgb(0, 149, 221); 142 | } 143 | .clockpicker-canvas-bg { 144 | stroke: none; 145 | fill: rgb(192, 229, 247); 146 | } 147 | .clockpicker-canvas-bg-trans { 148 | fill: rgba(0, 149, 221, .25); 149 | } 150 | .clockpicker-canvas line { 151 | stroke: rgb(0, 149, 221); 152 | stroke-width: 1; 153 | stroke-linecap: round; 154 | /*shape-rendering: crispEdges;*/ 155 | } 156 | .clockpicker-button.am-button { 157 | margin: 1px; 158 | padding: 5px; 159 | border: 1px solid rgba(0, 0, 0, .2); 160 | border-radius: 4px; 161 | 162 | } 163 | .clockpicker-button.pm-button { 164 | margin: 1px 1px 1px 136px; 165 | padding: 5px; 166 | border: 1px solid rgba(0, 0, 0, .2); 167 | border-radius: 4px; 168 | } 169 | -------------------------------------------------------------------------------- /static/css/plugins/colorpicker/bootstrap-colorpicker.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Colorpicker 3 | * http://mjolnic.github.io/bootstrap-colorpicker/ 4 | * 5 | * Originally written by (c) 2012 Stefan Petre 6 | * Licensed under the Apache License v2.0 7 | * http://www.apache.org/licenses/LICENSE-2.0.txt 8 | * 9 | */.colorpicker-saturation{float:left;width:100px;height:100px;cursor:crosshair;background-image:url("../images/bootstrap-colorpicker/saturation.png")}.colorpicker-saturation i{position:absolute;top:0;left:0;display:block;width:5px;height:5px;margin:-4px 0 0 -4px;border:1px solid #000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-saturation i b{display:block;width:5px;height:5px;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.colorpicker-hue,.colorpicker-alpha{float:left;width:15px;height:100px;margin-bottom:4px;margin-left:4px;cursor:row-resize}.colorpicker-hue i,.colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:100%;height:1px;margin-top:-1px;background:#000;border-top:1px solid #fff}.colorpicker-hue{background-image:url("../images/bootstrap-colorpicker/hue.png")}.colorpicker-alpha{display:none;background-image:url("../images/bootstrap-colorpicker/alpha.png")}.colorpicker{top:0;left:0;z-index:2500;min-width:130px;padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1}.colorpicker:before,.colorpicker:after{display:table;line-height:0;content:""}.colorpicker:after{clear:both}.colorpicker:before{position:absolute;top:-7px;left:6px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.colorpicker:after{position:absolute;top:-6px;left:7px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.colorpicker div{position:relative}.colorpicker.colorpicker-with-alpha{min-width:140px}.colorpicker.colorpicker-with-alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url("../images/bootstrap-colorpicker/alpha.png");background-position:0 100%}.colorpicker-color div{height:10px}.colorpicker-element .input-group-addon i,.colorpicker-element .add-on i{display:inline-block;width:16px;height:16px;vertical-align:text-top;cursor:pointer}.colorpicker.colorpicker-inline{position:relative;z-index:auto;display:inline-block;float:none}.colorpicker.colorpicker-horizontal{width:110px;height:auto;min-width:110px}.colorpicker.colorpicker-horizontal .colorpicker-saturation{margin-bottom:4px}.colorpicker.colorpicker-horizontal .colorpicker-color{width:100px}.colorpicker.colorpicker-horizontal .colorpicker-hue,.colorpicker.colorpicker-horizontal .colorpicker-alpha{float:left;width:100px;height:15px;margin-bottom:4px;margin-left:0;cursor:col-resize}.colorpicker.colorpicker-horizontal .colorpicker-hue i,.colorpicker.colorpicker-horizontal .colorpicker-alpha i{position:absolute;top:0;left:0;display:block;width:1px;height:15px;margin-top:0;background:#fff;border:0}.colorpicker.colorpicker-horizontal .colorpicker-hue{background-image:url("../images/bootstrap-colorpicker/hue-horizontal.png")}.colorpicker.colorpicker-horizontal .colorpicker-alpha{background-image:url("../images/bootstrap-colorpicker/alpha-horizontal.png")}.colorpicker.colorpicker-hidden{display:none}.colorpicker.colorpicker-visible{display:block}.colorpicker-inline.colorpicker-visible{display:inline-block} -------------------------------------------------------------------------------- /static/css/plugins/cropper/cropper.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Cropper v0.7.6-beta 3 | * https://github.com/fengyuanchen/cropper 4 | * 5 | * Copyright 2014 Fengyuan Chen 6 | * Released under the MIT license 7 | */ 8 | 9 | .cropper-container{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.cropper-container img{width:100%;height:100%;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important}.cropper-modal,.cropper-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.cropper-canvas{background-color:#fff;opacity:0;filter:alpha(opacity=0)}.cropper-modal{background-color:#000;opacity:.5;filter:alpha(opacity=50)}.cropper-dragger{position:absolute;top:10%;left:10%;width:80%;height:80%}.cropper-viewer{display:block;width:100%;height:100%;overflow:hidden;outline-width:1px;outline-style:solid;outline-color:#69f;outline-color:rgba(51,102,255,.75)}.cropper-dashed{position:absolute;display:block;border:0 dashed #fff;opacity:.5;filter:alpha(opacity=50)}.cropper-dashed.dashed-h{top:33.3%;left:0;width:100%;height:33.3%;border-top-width:1px;border-bottom-width:1px}.cropper-dashed.dashed-v{top:0;left:33.3%;width:33.3%;height:100%;border-right-width:1px;border-left-width:1px}.cropper-face,.cropper-line,.cropper-point{position:absolute;display:block;width:100%;height:100%;opacity:.1;filter:alpha(opacity=10)}.cropper-face{top:0;left:0;cursor:move;background-color:#fff}.cropper-line{background-color:#69f}.cropper-line.line-e{top:0;right:-3px;width:5px;cursor:e-resize}.cropper-line.line-n{top:-3px;left:0;height:5px;cursor:n-resize}.cropper-line.line-w{top:0;left:-3px;width:5px;cursor:w-resize}.cropper-line.line-s{bottom:-3px;left:0;height:5px;cursor:s-resize}.cropper-point{width:5px;height:5px;background-color:#69f;opacity:.75;filter:alpha(opacity=75)}.cropper-point.point-e{top:50%;right:-3px;margin-top:-3px;cursor:e-resize}.cropper-point.point-n{top:-3px;left:50%;margin-left:-3px;cursor:n-resize}.cropper-point.point-w{top:50%;left:-3px;margin-top:-3px;cursor:w-resize}.cropper-point.point-s{bottom:-3px;left:50%;margin-left:-3px;cursor:s-resize}.cropper-point.point-ne{top:-3px;right:-3px;cursor:ne-resize}.cropper-point.point-nw{top:-3px;left:-3px;cursor:nw-resize}.cropper-point.point-sw{bottom:-3px;left:-3px;cursor:sw-resize}.cropper-point.point-se{right:-3px;bottom:-3px;width:20px;height:20px;cursor:se-resize;opacity:1;filter:alpha(opacity=100)}.cropper-point.point-se:before{position:absolute;right:-50%;bottom:-50%;display:block;width:200%;height:200%;content:" ";background-color:#69f;opacity:0;filter:alpha(opacity=0)}@media (min-width:768px){.cropper-point.point-se{width:15px;height:15px}}@media (min-width:992px){.cropper-point.point-se{width:10px;height:10px}}@media (min-width:1200px){.cropper-point.point-se{width:5px;height:5px;opacity:.75;filter:alpha(opacity=75)}}.cropper-hidden{display:none!important}.cropper-invisible{position:fixed;top:0;left:0;z-index:-1;width:auto!important;max-width:none!important;height:auto!important;max-height:none!important;opacity:0;filter:alpha(opacity=0)}.cropper-move{cursor:move}.cropper-crop{cursor:crosshair}.cropper-disabled .cropper-canvas,.cropper-disabled .cropper-face,.cropper-disabled .cropper-line,.cropper-disabled .cropper-point{cursor:not-allowed} -------------------------------------------------------------------------------- /static/css/plugins/dropzone/basic.css: -------------------------------------------------------------------------------- 1 | /* The MIT License */ 2 | .dropzone, 3 | .dropzone *, 4 | .dropzone-previews, 5 | .dropzone-previews * { 6 | -webkit-box-sizing: border-box; 7 | -moz-box-sizing: border-box; 8 | box-sizing: border-box; 9 | } 10 | .dropzone { 11 | position: relative; 12 | border: 1px solid rgba(0,0,0,0.08); 13 | background: rgba(0,0,0,0.02); 14 | padding: 1em; 15 | } 16 | .dropzone.dz-clickable { 17 | cursor: pointer; 18 | } 19 | .dropzone.dz-clickable .dz-message, 20 | .dropzone.dz-clickable .dz-message span { 21 | cursor: pointer; 22 | } 23 | .dropzone.dz-clickable * { 24 | cursor: default; 25 | } 26 | .dropzone .dz-message { 27 | opacity: 1; 28 | -ms-filter: none; 29 | filter: none; 30 | } 31 | .dropzone.dz-drag-hover { 32 | border-color: rgba(0,0,0,0.15); 33 | background: rgba(0,0,0,0.04); 34 | } 35 | .dropzone.dz-started .dz-message { 36 | display: none; 37 | } 38 | .dropzone .dz-preview, 39 | .dropzone-previews .dz-preview { 40 | background: rgba(255,255,255,0.8); 41 | position: relative; 42 | display: inline-block; 43 | margin: 17px; 44 | vertical-align: top; 45 | border: 1px solid #acacac; 46 | padding: 6px 6px 6px 6px; 47 | } 48 | .dropzone .dz-preview.dz-file-preview [data-dz-thumbnail], 49 | .dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] { 50 | display: none; 51 | } 52 | .dropzone .dz-preview .dz-details, 53 | .dropzone-previews .dz-preview .dz-details { 54 | width: 100px; 55 | height: 100px; 56 | position: relative; 57 | background: #ebebeb; 58 | padding: 5px; 59 | margin-bottom: 22px; 60 | } 61 | .dropzone .dz-preview .dz-details .dz-filename, 62 | .dropzone-previews .dz-preview .dz-details .dz-filename { 63 | overflow: hidden; 64 | height: 100%; 65 | } 66 | .dropzone .dz-preview .dz-details img, 67 | .dropzone-previews .dz-preview .dz-details img { 68 | position: absolute; 69 | top: 0; 70 | left: 0; 71 | width: 100px; 72 | height: 100px; 73 | } 74 | .dropzone .dz-preview .dz-details .dz-size, 75 | .dropzone-previews .dz-preview .dz-details .dz-size { 76 | position: absolute; 77 | bottom: -28px; 78 | left: 3px; 79 | height: 28px; 80 | line-height: 28px; 81 | } 82 | .dropzone .dz-preview.dz-error .dz-error-mark, 83 | .dropzone-previews .dz-preview.dz-error .dz-error-mark { 84 | display: block; 85 | } 86 | .dropzone .dz-preview.dz-success .dz-success-mark, 87 | .dropzone-previews .dz-preview.dz-success .dz-success-mark { 88 | display: block; 89 | } 90 | .dropzone .dz-preview:hover .dz-details img, 91 | .dropzone-previews .dz-preview:hover .dz-details img { 92 | display: none; 93 | } 94 | .dropzone .dz-preview .dz-success-mark, 95 | .dropzone-previews .dz-preview .dz-success-mark, 96 | .dropzone .dz-preview .dz-error-mark, 97 | .dropzone-previews .dz-preview .dz-error-mark { 98 | display: none; 99 | position: absolute; 100 | width: 40px; 101 | height: 40px; 102 | font-size: 30px; 103 | text-align: center; 104 | right: -10px; 105 | top: -10px; 106 | } 107 | .dropzone .dz-preview .dz-success-mark, 108 | .dropzone-previews .dz-preview .dz-success-mark { 109 | color: #8cc657; 110 | } 111 | .dropzone .dz-preview .dz-error-mark, 112 | .dropzone-previews .dz-preview .dz-error-mark { 113 | color: #ee162d; 114 | } 115 | .dropzone .dz-preview .dz-progress, 116 | .dropzone-previews .dz-preview .dz-progress { 117 | position: absolute; 118 | top: 100px; 119 | left: 6px; 120 | right: 6px; 121 | height: 6px; 122 | background: #d7d7d7; 123 | display: none; 124 | } 125 | .dropzone .dz-preview .dz-progress .dz-upload, 126 | .dropzone-previews .dz-preview .dz-progress .dz-upload { 127 | display: block; 128 | position: absolute; 129 | top: 0; 130 | bottom: 0; 131 | left: 0; 132 | width: 0%; 133 | background-color: #8cc657; 134 | } 135 | .dropzone .dz-preview.dz-processing .dz-progress, 136 | .dropzone-previews .dz-preview.dz-processing .dz-progress { 137 | display: block; 138 | } 139 | .dropzone .dz-preview .dz-error-message, 140 | .dropzone-previews .dz-preview .dz-error-message { 141 | display: none; 142 | position: absolute; 143 | top: -5px; 144 | left: -20px; 145 | background: rgba(245,245,245,0.8); 146 | padding: 8px 10px; 147 | color: #800; 148 | min-width: 140px; 149 | max-width: 500px; 150 | z-index: 500; 151 | } 152 | .dropzone .dz-preview:hover.dz-error .dz-error-message, 153 | .dropzone-previews .dz-preview:hover.dz-error .dz-error-message { 154 | display: block; 155 | } 156 | -------------------------------------------------------------------------------- /static/css/plugins/footable/fonts/footable.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/footable/fonts/footable.eot -------------------------------------------------------------------------------- /static/css/plugins/footable/fonts/footable.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/footable/fonts/footable.ttf -------------------------------------------------------------------------------- /static/css/plugins/footable/fonts/footable.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/footable/fonts/footable.woff -------------------------------------------------------------------------------- /static/css/plugins/iCheck/custom.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, green 2 | ----------------------------------- */ 3 | .icheckbox_square-green, 4 | .iradio_square-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-green.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-green.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-green.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-green.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-green { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-green.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-green.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-green.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-green.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-green, 54 | .iradio_square-green { 55 | background-image: url(green@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /static/css/plugins/iCheck/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/iCheck/green.png -------------------------------------------------------------------------------- /static/css/plugins/iCheck/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/iCheck/green@2x.png -------------------------------------------------------------------------------- /static/css/plugins/images/bootstrap-colorpicker/alpha-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/bootstrap-colorpicker/alpha-horizontal.png -------------------------------------------------------------------------------- /static/css/plugins/images/bootstrap-colorpicker/alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/bootstrap-colorpicker/alpha.png -------------------------------------------------------------------------------- /static/css/plugins/images/bootstrap-colorpicker/hue-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/bootstrap-colorpicker/hue-horizontal.png -------------------------------------------------------------------------------- /static/css/plugins/images/bootstrap-colorpicker/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/bootstrap-colorpicker/hue.png -------------------------------------------------------------------------------- /static/css/plugins/images/bootstrap-colorpicker/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/bootstrap-colorpicker/saturation.png -------------------------------------------------------------------------------- /static/css/plugins/images/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/sprite-skin-flat.png -------------------------------------------------------------------------------- /static/css/plugins/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/spritemap.png -------------------------------------------------------------------------------- /static/css/plugins/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/images/spritemap@2x.png -------------------------------------------------------------------------------- /static/css/plugins/ionRangeSlider/ion.rangeSlider.css: -------------------------------------------------------------------------------- 1 | /* Ion.RangeSlider 2 | // css version 1.8.5 3 | // by Denis Ineshin | ionden.com 4 | // ===================================================================================================================*/ 5 | 6 | /* ===================================================================================================================== 7 | // RangeSlider */ 8 | 9 | .irs { 10 | position: relative; display: block; 11 | } 12 | .irs-line { 13 | position: relative; display: block; 14 | overflow: hidden; 15 | } 16 | .irs-line-left, .irs-line-mid, .irs-line-right { 17 | position: absolute; display: block; 18 | top: 0; 19 | } 20 | .irs-line-left { 21 | left: 0; width: 10%; 22 | } 23 | .irs-line-mid { 24 | left: 10%; width: 80%; 25 | } 26 | .irs-line-right { 27 | right: 0; width: 10%; 28 | } 29 | 30 | .irs-diapason { 31 | position: absolute; display: block; 32 | left: 0; width: 100%; 33 | } 34 | .irs-slider { 35 | position: absolute; display: block; 36 | cursor: default; 37 | z-index: 1; 38 | } 39 | .irs-slider.single { 40 | left: 10px; 41 | } 42 | .irs-slider.single:before { 43 | position: absolute; display: block; content: ""; 44 | top: -30%; left: -30%; 45 | width: 160%; height: 160%; 46 | background: rgba(0,0,0,0.0); 47 | } 48 | .irs-slider.from { 49 | left: 100px; 50 | } 51 | .irs-slider.from:before { 52 | position: absolute; display: block; content: ""; 53 | top: -30%; left: -30%; 54 | width: 130%; height: 160%; 55 | background: rgba(0,0,0,0.0); 56 | } 57 | .irs-slider.to { 58 | left: 300px; 59 | } 60 | .irs-slider.to:before { 61 | position: absolute; display: block; content: ""; 62 | top: -30%; left: 0; 63 | width: 130%; height: 160%; 64 | background: rgba(0,0,0,0.0); 65 | } 66 | .irs-slider.last { 67 | z-index: 2; 68 | } 69 | 70 | .irs-min { 71 | position: absolute; display: block; 72 | left: 0; 73 | cursor: default; 74 | } 75 | .irs-max { 76 | position: absolute; display: block; 77 | right: 0; 78 | cursor: default; 79 | } 80 | 81 | .irs-from, .irs-to, .irs-single { 82 | position: absolute; display: block; 83 | top: 0; left: 0; 84 | cursor: default; 85 | white-space: nowrap; 86 | } 87 | 88 | 89 | .irs-grid { 90 | position: absolute; display: none; 91 | bottom: 0; left: 0; 92 | width: 100%; height: 20px; 93 | } 94 | .irs-with-grid .irs-grid { 95 | display: block; 96 | } 97 | .irs-grid-pol { 98 | position: absolute; 99 | top: 0; left: 0; 100 | width: 1px; height: 8px; 101 | background: #000; 102 | } 103 | .irs-grid-pol.small { 104 | height: 4px; 105 | } 106 | .irs-grid-text { 107 | position: absolute; 108 | bottom: 0; left: 0; 109 | width: 100px; 110 | white-space: nowrap; 111 | text-align: center; 112 | font-size: 9px; line-height: 9px; 113 | color: #000; 114 | } 115 | 116 | .irs-disable-mask { 117 | position: absolute; display: block; 118 | top: 0; left: 0; 119 | width: 100%; height: 100%; 120 | cursor: default; 121 | background: rgba(0,0,0,0.0); 122 | z-index: 2; 123 | } 124 | .irs-disabled { 125 | opacity: 0.4; 126 | } -------------------------------------------------------------------------------- /static/css/plugins/ionRangeSlider/ion.rangeSlider.skinFlat.css: -------------------------------------------------------------------------------- 1 | /* Ion.RangeSlider, Flat UI Skin 2 | // css version 1.8.5 3 | // by Denis Ineshin | ionden.com 4 | // ===================================================================================================================*/ 5 | 6 | /* ===================================================================================================================== 7 | // Skin details */ 8 | 9 | .irs-line-mid, 10 | .irs-line-left, 11 | .irs-line-right, 12 | .irs-diapason, 13 | .irs-slider { 14 | background: url(../images/sprite-skin-flat.png) repeat-x; 15 | } 16 | 17 | .irs { 18 | height: 40px; 19 | } 20 | .irs-with-grid { 21 | height: 60px; 22 | } 23 | .irs-line { 24 | height: 12px; top: 25px; 25 | } 26 | .irs-line-left { 27 | height: 12px; 28 | background-position: 0 -30px; 29 | } 30 | .irs-line-mid { 31 | height: 12px; 32 | background-position: 0 0; 33 | } 34 | .irs-line-right { 35 | height: 12px; 36 | background-position: 100% -30px; 37 | } 38 | 39 | .irs-diapason { 40 | height: 12px; top: 25px; 41 | background-position: 0 -60px; 42 | } 43 | 44 | .irs-slider { 45 | width: 16px; height: 18px; 46 | top: 22px; 47 | background-position: 0 -90px; 48 | } 49 | #irs-active-slider, .irs-slider:hover { 50 | background-position: 0 -120px; 51 | } 52 | 53 | .irs-min, .irs-max { 54 | color: #999; 55 | font-size: 10px; line-height: 1.333; 56 | text-shadow: none; 57 | top: 0; padding: 1px 3px; 58 | background: #e1e4e9; 59 | border-radius: 4px; 60 | } 61 | 62 | .irs-from, .irs-to, .irs-single { 63 | color: #fff; 64 | font-size: 10px; line-height: 1.333; 65 | text-shadow: none; 66 | padding: 1px 5px; 67 | background: #ed5565; 68 | border-radius: 4px; 69 | } 70 | .irs-from:after, .irs-to:after, .irs-single:after { 71 | position: absolute; display: block; content: ""; 72 | bottom: -6px; left: 50%; 73 | width: 0; height: 0; 74 | margin-left: -3px; 75 | overflow: hidden; 76 | border: 3px solid transparent; 77 | border-top-color: #ed5565; 78 | } 79 | 80 | 81 | .irs-grid-pol { 82 | background: #e1e4e9; 83 | } 84 | .irs-grid-text { 85 | color: #999; 86 | } 87 | 88 | .irs-disabled { 89 | } -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/animated-overlay.gif -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /static/css/plugins/jQueryUI/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jQueryUI/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /static/css/plugins/jsTree/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jsTree/32px.png -------------------------------------------------------------------------------- /static/css/plugins/jsTree/40px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jsTree/40px.png -------------------------------------------------------------------------------- /static/css/plugins/jsTree/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/jsTree/throbber.gif -------------------------------------------------------------------------------- /static/css/plugins/morris/morris-0.4.3.min.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} -------------------------------------------------------------------------------- /static/css/plugins/nouslider/jquery.nouislider.css: -------------------------------------------------------------------------------- 1 | 2 | /* Functional styling; 3 | * These styles are required for noUiSlider to function. 4 | * You don't need to change these rules to apply your design. 5 | */ 6 | .noUi-target, 7 | .noUi-target * { 8 | -webkit-touch-callout: none; 9 | -webkit-user-select: none; 10 | -ms-touch-action: none; 11 | -ms-user-select: none; 12 | -moz-user-select: none; 13 | -moz-box-sizing: border-box; 14 | box-sizing: border-box; 15 | } 16 | .noUi-base { 17 | width: 100%; 18 | height: 100%; 19 | position: relative; 20 | } 21 | .noUi-origin { 22 | position: absolute; 23 | right: 0; 24 | top: 0; 25 | left: 0; 26 | bottom: 0; 27 | } 28 | .noUi-handle { 29 | position: relative; 30 | z-index: 1; 31 | } 32 | .noUi-stacking .noUi-handle { 33 | /* This class is applied to the lower origin when 34 | its values is > 50%. */ 35 | z-index: 10; 36 | } 37 | .noUi-stacking + .noUi-origin { 38 | /* Fix stacking order in IE7, which incorrectly 39 | creates a new context for the origins. */ 40 | *z-index: -1; 41 | } 42 | .noUi-state-tap .noUi-origin { 43 | -webkit-transition: left 0.3s, top 0.3s; 44 | transition: left 0.3s, top 0.3s; 45 | } 46 | .noUi-state-drag * { 47 | cursor: inherit !important; 48 | } 49 | 50 | /* Slider size and handle placement; 51 | */ 52 | .noUi-horizontal { 53 | height: 18px; 54 | } 55 | .noUi-horizontal .noUi-handle { 56 | width: 34px; 57 | height: 28px; 58 | left: -17px; 59 | top: -6px; 60 | } 61 | .noUi-horizontal.noUi-extended { 62 | padding: 0 15px; 63 | } 64 | .noUi-horizontal.noUi-extended .noUi-origin { 65 | right: -15px; 66 | } 67 | .noUi-vertical { 68 | width: 18px; 69 | } 70 | .noUi-vertical .noUi-handle { 71 | width: 28px; 72 | height: 34px; 73 | left: -6px; 74 | top: -17px; 75 | } 76 | .noUi-vertical.noUi-extended { 77 | padding: 15px 0; 78 | } 79 | .noUi-vertical.noUi-extended .noUi-origin { 80 | bottom: -15px; 81 | } 82 | 83 | /* Styling; 84 | */ 85 | .noUi-background { 86 | background: #FAFAFA; 87 | box-shadow: inset 0 1px 1px #f0f0f0; 88 | } 89 | .noUi-connect { 90 | background: #3FB8AF; 91 | box-shadow: inset 0 0 3px rgba(51,51,51,0.45); 92 | -webkit-transition: background 450ms; 93 | transition: background 450ms; 94 | } 95 | .noUi-origin { 96 | border-radius: 2px; 97 | } 98 | .noUi-target { 99 | border-radius: 4px; 100 | border: 1px solid #D3D3D3; 101 | box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB; 102 | } 103 | .noUi-target.noUi-connect { 104 | box-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB; 105 | } 106 | 107 | /* Handles and cursors; 108 | */ 109 | .noUi-dragable { 110 | cursor: w-resize; 111 | } 112 | .noUi-vertical .noUi-dragable { 113 | cursor: n-resize; 114 | } 115 | .noUi-handle { 116 | border: 1px solid #D9D9D9; 117 | border-radius: 3px; 118 | background: #FFF; 119 | cursor: default; 120 | box-shadow: inset 0 0 1px #FFF, 121 | inset 0 1px 7px #EBEBEB, 122 | 0 3px 6px -3px #BBB; 123 | } 124 | .noUi-active { 125 | box-shadow: inset 0 0 1px #FFF, 126 | inset 0 1px 7px #DDD, 127 | 0 3px 6px -3px #BBB; 128 | } 129 | 130 | /* Handle stripes; 131 | */ 132 | .noUi-handle:before, 133 | .noUi-handle:after { 134 | content: ""; 135 | display: block; 136 | position: absolute; 137 | height: 14px; 138 | width: 1px; 139 | background: #E8E7E6; 140 | left: 14px; 141 | top: 6px; 142 | } 143 | .noUi-handle:after { 144 | left: 17px; 145 | } 146 | .noUi-vertical .noUi-handle:before, 147 | .noUi-vertical .noUi-handle:after { 148 | width: 14px; 149 | height: 1px; 150 | left: 6px; 151 | top: 14px; 152 | } 153 | .noUi-vertical .noUi-handle:after { 154 | top: 17px; 155 | } 156 | 157 | /* Disabled state; 158 | */ 159 | [disabled].noUi-connect, 160 | [disabled] .noUi-connect { 161 | background: #B8B8B8; 162 | } 163 | [disabled] .noUi-handle { 164 | cursor: not-allowed; 165 | } 166 | -------------------------------------------------------------------------------- /static/css/plugins/slick/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/slick/ajax-loader.gif -------------------------------------------------------------------------------- /static/css/plugins/slick/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/slick/fonts/slick.eot -------------------------------------------------------------------------------- /static/css/plugins/slick/fonts/slick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/css/plugins/slick/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/slick/fonts/slick.ttf -------------------------------------------------------------------------------- /static/css/plugins/slick/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/css/plugins/slick/fonts/slick.woff -------------------------------------------------------------------------------- /static/css/plugins/slick/slick-theme.css: -------------------------------------------------------------------------------- 1 | @charset 'UTF-8'; 2 | /* Slider */ 3 | .slick-loading .slick-list 4 | { 5 | background: #fff url('ajax-loader.gif') center center no-repeat; 6 | } 7 | 8 | /* Icons */ 9 | @font-face 10 | { 11 | font-family: 'slick'; 12 | font-weight: normal; 13 | font-style: normal; 14 | 15 | src: url('fonts/slick.eot'); 16 | src: url('fonts/slick.eot?#iefix') format('embedded-opentype'), url('fonts/slick.woff') format('woff'), url('fonts/slick.ttf') format('truetype'), url('fonts/slick.svg#slick') format('svg'); 17 | } 18 | /* Arrows */ 19 | .slick-prev, 20 | .slick-next 21 | { 22 | font-size: 0; 23 | line-height: 0; 24 | 25 | position: absolute; 26 | top: 50%; 27 | 28 | display: block; 29 | 30 | width: 20px; 31 | height: 20px; 32 | margin-top: -10px; 33 | padding: 0; 34 | 35 | cursor: pointer; 36 | 37 | color: transparent; 38 | border: none; 39 | outline: none; 40 | background: transparent; 41 | } 42 | .slick-prev:hover, 43 | .slick-prev:focus, 44 | .slick-next:hover, 45 | .slick-next:focus 46 | { 47 | color: transparent; 48 | outline: none; 49 | background: transparent; 50 | } 51 | .slick-prev:hover:before, 52 | .slick-prev:focus:before, 53 | .slick-next:hover:before, 54 | .slick-next:focus:before 55 | { 56 | opacity: 1; 57 | } 58 | .slick-prev.slick-disabled:before, 59 | .slick-next.slick-disabled:before 60 | { 61 | opacity: .25; 62 | } 63 | 64 | .slick-prev:before, 65 | .slick-next:before 66 | { 67 | font-family: 'slick'; 68 | font-size: 20px; 69 | line-height: 1; 70 | 71 | opacity: .75; 72 | color: white; 73 | 74 | -webkit-font-smoothing: antialiased; 75 | -moz-osx-font-smoothing: grayscale; 76 | } 77 | 78 | .slick-prev 79 | { 80 | left: -25px; 81 | } 82 | [dir='rtl'] .slick-prev 83 | { 84 | right: -25px; 85 | left: auto; 86 | } 87 | .slick-prev:before 88 | { 89 | content: '←'; 90 | } 91 | [dir='rtl'] .slick-prev:before 92 | { 93 | content: '→'; 94 | } 95 | 96 | .slick-next 97 | { 98 | right: -25px; 99 | } 100 | [dir='rtl'] .slick-next 101 | { 102 | right: auto; 103 | left: -25px; 104 | } 105 | .slick-next:before 106 | { 107 | content: '→'; 108 | } 109 | [dir='rtl'] .slick-next:before 110 | { 111 | content: '←'; 112 | } 113 | 114 | /* Dots */ 115 | .slick-slider 116 | { 117 | margin-bottom: 30px; 118 | } 119 | 120 | .slick-dots 121 | { 122 | position: absolute; 123 | bottom: -45px; 124 | 125 | display: block; 126 | 127 | width: 100%; 128 | padding: 0; 129 | 130 | list-style: none; 131 | 132 | text-align: center; 133 | } 134 | .slick-dots li 135 | { 136 | position: relative; 137 | 138 | display: inline-block; 139 | 140 | width: 20px; 141 | height: 20px; 142 | margin: 0 5px; 143 | padding: 0; 144 | 145 | cursor: pointer; 146 | } 147 | .slick-dots li button 148 | { 149 | font-size: 0; 150 | line-height: 0; 151 | 152 | display: block; 153 | 154 | width: 20px; 155 | height: 20px; 156 | padding: 5px; 157 | 158 | cursor: pointer; 159 | 160 | color: transparent; 161 | border: 0; 162 | outline: none; 163 | background: transparent; 164 | } 165 | .slick-dots li button:hover, 166 | .slick-dots li button:focus 167 | { 168 | outline: none; 169 | } 170 | .slick-dots li button:hover:before, 171 | .slick-dots li button:focus:before 172 | { 173 | opacity: 1; 174 | } 175 | .slick-dots li button:before 176 | { 177 | font-family: 'slick'; 178 | font-size: 6px; 179 | line-height: 20px; 180 | 181 | position: absolute; 182 | top: 0; 183 | left: 0; 184 | 185 | width: 20px; 186 | height: 20px; 187 | 188 | content: '•'; 189 | text-align: center; 190 | 191 | opacity: .25; 192 | color: black; 193 | 194 | -webkit-font-smoothing: antialiased; 195 | -moz-osx-font-smoothing: grayscale; 196 | } 197 | .slick-dots li.slick-active button:before 198 | { 199 | opacity: .75; 200 | color: black; 201 | } 202 | -------------------------------------------------------------------------------- /static/css/plugins/slick/slick.css: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | .slick-slider 3 | { 4 | position: relative; 5 | 6 | display: block; 7 | 8 | -moz-box-sizing: border-box; 9 | box-sizing: border-box; 10 | 11 | -webkit-user-select: none; 12 | -moz-user-select: none; 13 | -ms-user-select: none; 14 | user-select: none; 15 | 16 | -webkit-touch-callout: none; 17 | -khtml-user-select: none; 18 | -ms-touch-action: pan-y; 19 | touch-action: pan-y; 20 | -webkit-tap-highlight-color: transparent; 21 | } 22 | 23 | .slick-list 24 | { 25 | position: relative; 26 | 27 | display: block; 28 | overflow: hidden; 29 | 30 | margin: 0; 31 | padding: 0; 32 | } 33 | .slick-list:focus 34 | { 35 | outline: none; 36 | } 37 | .slick-list.dragging 38 | { 39 | cursor: pointer; 40 | cursor: hand; 41 | } 42 | 43 | .slick-slider .slick-track, 44 | .slick-slider .slick-list 45 | { 46 | -webkit-transform: translate3d(0, 0, 0); 47 | -moz-transform: translate3d(0, 0, 0); 48 | -ms-transform: translate3d(0, 0, 0); 49 | -o-transform: translate3d(0, 0, 0); 50 | transform: translate3d(0, 0, 0); 51 | } 52 | 53 | .slick-track 54 | { 55 | position: relative; 56 | top: 0; 57 | left: 0; 58 | 59 | display: block; 60 | } 61 | .slick-track:before, 62 | .slick-track:after 63 | { 64 | display: table; 65 | 66 | content: ''; 67 | } 68 | .slick-track:after 69 | { 70 | clear: both; 71 | } 72 | .slick-loading .slick-track 73 | { 74 | visibility: hidden; 75 | } 76 | 77 | .slick-slide 78 | { 79 | display: none; 80 | float: left; 81 | 82 | height: 100%; 83 | min-height: 1px; 84 | } 85 | [dir='rtl'] .slick-slide 86 | { 87 | float: right; 88 | } 89 | .slick-slide img 90 | { 91 | display: block; 92 | } 93 | .slick-slide.slick-loading img 94 | { 95 | display: none; 96 | } 97 | .slick-slide.dragging img 98 | { 99 | pointer-events: none; 100 | } 101 | .slick-initialized .slick-slide 102 | { 103 | display: block; 104 | } 105 | .slick-loading .slick-slide 106 | { 107 | visibility: hidden; 108 | } 109 | .slick-vertical .slick-slide 110 | { 111 | display: block; 112 | 113 | height: auto; 114 | 115 | border: 1px solid transparent; 116 | } 117 | .slick-arrow.slick-hidden { 118 | display: none; 119 | } -------------------------------------------------------------------------------- /static/css/plugins/switchery/switchery.css: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Main stylesheet for Switchery. 4 | * http://abpetkov.github.io/switchery/ 5 | * 6 | */ 7 | 8 | .switchery { 9 | background-color: #fff; 10 | border: 1px solid #dfdfdf; 11 | border-radius: 20px; 12 | cursor: pointer; 13 | display: inline-block; 14 | height: 30px; 15 | position: relative; 16 | vertical-align: middle; 17 | width: 50px; 18 | 19 | -webkit-box-sizing: content-box; 20 | -moz-box-sizing: content-box; 21 | box-sizing: content-box; 22 | } 23 | 24 | .switchery > small { 25 | background: #fff; 26 | border-radius: 100%; 27 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 28 | height: 30px; 29 | position: absolute; 30 | top: 0; 31 | width: 30px; 32 | } -------------------------------------------------------------------------------- /static/css/plugins/touchspin/jquery.bootstrap-touchspin.min.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Bootstrap TouchSpin - v3.0.1 3 | * A mobile and touch friendly input spinner component for Bootstrap 3. 4 | * http://www.virtuosoft.eu/code/bootstrap-touchspin/ 5 | * 6 | * Made by István Ujj-Mészáros 7 | * Under Apache License v2.0 License 8 | */ 9 | 10 | .bootstrap-touchspin .input-group-btn-vertical{position:relative;white-space:nowrap;width:1%;vertical-align:middle;display:table-cell}.bootstrap-touchspin .input-group-btn-vertical>.btn{display:block;float:none;width:100%;max-width:100%;padding:8px 10px;margin-left:-1px;position:relative}.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-up{border-radius:0;border-top-right-radius:4px}.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-down{margin-top:-2px;border-radius:0;border-bottom-right-radius:4px}.bootstrap-touchspin .input-group-btn-vertical i{position:absolute;top:3px;left:5px;font-size:9px;font-weight:400} -------------------------------------------------------------------------------- /static/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /static/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/1.png -------------------------------------------------------------------------------- /static/img/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/10.png -------------------------------------------------------------------------------- /static/img/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/111.png -------------------------------------------------------------------------------- /static/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/2.png -------------------------------------------------------------------------------- /static/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/3.png -------------------------------------------------------------------------------- /static/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/4.png -------------------------------------------------------------------------------- /static/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/5.png -------------------------------------------------------------------------------- /static/img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/6.png -------------------------------------------------------------------------------- /static/img/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/7.png -------------------------------------------------------------------------------- /static/img/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/8.png -------------------------------------------------------------------------------- /static/img/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/9.png -------------------------------------------------------------------------------- /static/img/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/group.png -------------------------------------------------------------------------------- /static/img/profile_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/img/profile_small.jpg -------------------------------------------------------------------------------- /static/js/plugins/flot/jquery.flot.resize.js: -------------------------------------------------------------------------------- 1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes. 2 | 3 | Copyright (c) 2007-2014 IOLA and Ole Laursen. 4 | Licensed under the MIT license. 5 | 6 | It works by listening for changes on the placeholder div (through the jQuery 7 | resize event plugin) - if the size changes, it will redraw the plot. 8 | 9 | There are no options. If you need to disable the plugin for some plots, you 10 | can just fix the size of their placeholders. 11 | 12 | */ 13 | 14 | /* Inline dependency: 15 | * jQuery resize event - v1.1 - 3/14/2010 16 | * http://benalman.com/projects/jquery-resize-plugin/ 17 | * 18 | * Copyright (c) 2010 "Cowboy" Ben Alman 19 | * Dual licensed under the MIT and GPL licenses. 20 | * http://benalman.com/about/license/ 21 | */ 22 | (function($,e,t){"$:nomunge";var i=[],n=$.resize=$.extend($.resize,{}),a,r=false,s="setTimeout",u="resize",m=u+"-special-event",o="pendingDelay",l="activeDelay",f="throttleWindow";n[o]=200;n[l]=20;n[f]=true;$.event.special[u]={setup:function(){if(!n[f]&&this[s]){return false}var e=$(this);i.push(this);e.data(m,{w:e.width(),h:e.height()});if(i.length===1){a=t;h()}},teardown:function(){if(!n[f]&&this[s]){return false}var e=$(this);for(var t=i.length-1;t>=0;t--){if(i[t]==this){i.splice(t,1);break}}e.removeData(m);if(!i.length){if(r){cancelAnimationFrame(a)}else{clearTimeout(a)}a=null}},add:function(e){if(!n[f]&&this[s]){return false}var i;function a(e,n,a){var r=$(this),s=r.data(m)||{};s.w=n!==t?n:r.width();s.h=a!==t?a:r.height();i.apply(this,arguments)}if($.isFunction(e)){i=e;return a}else{i=e.handler;e.handler=a}}};function h(t){if(r===true){r=t||1}for(var s=i.length-1;s>=0;s--){var l=$(i[s]);if(l[0]==e||l.is(":visible")){var f=l.width(),c=l.height(),d=l.data(m);if(d&&(f!==d.w||c!==d.h)){l.trigger(u,[d.w=f,d.h=c]);r=t||true}}else{d=l.data(m);d.w=0;d.h=0}}if(a!==null){if(r&&(t==null||t-r<1e3)){a=e.requestAnimationFrame(h)}else{a=setTimeout(h,n[o]);r=false}}}if(!e.requestAnimationFrame){e.requestAnimationFrame=function(){return e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(t,i){return e.setTimeout(function(){t((new Date).getTime())},n[l])}}()}if(!e.cancelAnimationFrame){e.cancelAnimationFrame=function(){return e.webkitCancelRequestAnimationFrame||e.mozCancelRequestAnimationFrame||e.oCancelRequestAnimationFrame||e.msCancelRequestAnimationFrame||clearTimeout}()}})(jQuery,this); 23 | 24 | (function ($) { 25 | var options = { }; // no options 26 | 27 | function init(plot) { 28 | function onResize() { 29 | var placeholder = plot.getPlaceholder(); 30 | 31 | // somebody might have hidden us and we can't plot 32 | // when we don't have the dimensions 33 | if (placeholder.width() == 0 || placeholder.height() == 0) 34 | return; 35 | 36 | plot.resize(); 37 | plot.setupGrid(); 38 | plot.draw(); 39 | } 40 | 41 | function bindEvents(plot, eventHolder) { 42 | plot.getPlaceholder().resize(onResize); 43 | } 44 | 45 | function shutdown(plot, eventHolder) { 46 | plot.getPlaceholder().unbind("resize", onResize); 47 | } 48 | 49 | plot.hooks.bindEvents.push(bindEvents); 50 | plot.hooks.shutdown.push(shutdown); 51 | } 52 | 53 | $.plot.plugins.push({ 54 | init: init, 55 | options: options, 56 | name: 'resize', 57 | version: '1.0' 58 | }); 59 | })(jQuery); 60 | -------------------------------------------------------------------------------- /static/js/plugins/flot/jquery.flot.symbol.js: -------------------------------------------------------------------------------- 1 | /* Flot plugin that adds some extra symbols for plotting points. 2 | 3 | Copyright (c) 2007-2014 IOLA and Ole Laursen. 4 | Licensed under the MIT license. 5 | 6 | The symbols are accessed as strings through the standard symbol options: 7 | 8 | series: { 9 | points: { 10 | symbol: "square" // or "diamond", "triangle", "cross" 11 | } 12 | } 13 | 14 | */ 15 | 16 | (function ($) { 17 | function processRawData(plot, series, datapoints) { 18 | // we normalize the area of each symbol so it is approximately the 19 | // same as a circle of the given radius 20 | 21 | var handlers = { 22 | square: function (ctx, x, y, radius, shadow) { 23 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 24 | var size = radius * Math.sqrt(Math.PI) / 2; 25 | ctx.rect(x - size, y - size, size + size, size + size); 26 | }, 27 | diamond: function (ctx, x, y, radius, shadow) { 28 | // pi * r^2 = 2s^2 => s = r * sqrt(pi/2) 29 | var size = radius * Math.sqrt(Math.PI / 2); 30 | ctx.moveTo(x - size, y); 31 | ctx.lineTo(x, y - size); 32 | ctx.lineTo(x + size, y); 33 | ctx.lineTo(x, y + size); 34 | ctx.lineTo(x - size, y); 35 | }, 36 | triangle: function (ctx, x, y, radius, shadow) { 37 | // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3)) 38 | var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); 39 | var height = size * Math.sin(Math.PI / 3); 40 | ctx.moveTo(x - size/2, y + height/2); 41 | ctx.lineTo(x + size/2, y + height/2); 42 | if (!shadow) { 43 | ctx.lineTo(x, y - height/2); 44 | ctx.lineTo(x - size/2, y + height/2); 45 | } 46 | }, 47 | cross: function (ctx, x, y, radius, shadow) { 48 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 49 | var size = radius * Math.sqrt(Math.PI) / 2; 50 | ctx.moveTo(x - size, y - size); 51 | ctx.lineTo(x + size, y + size); 52 | ctx.moveTo(x - size, y + size); 53 | ctx.lineTo(x + size, y - size); 54 | } 55 | }; 56 | 57 | var s = series.points.symbol; 58 | if (handlers[s]) 59 | series.points.symbol = handlers[s]; 60 | } 61 | 62 | function init(plot) { 63 | plot.hooks.processDatapoints.push(processRawData); 64 | } 65 | 66 | $.plot.plugins.push({ 67 | init: init, 68 | name: 'symbols', 69 | version: '1.0' 70 | }); 71 | })(jQuery); 72 | -------------------------------------------------------------------------------- /static/js/plugins/flot/jquery.flot.tooltip.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jquery.flot.tooltip 3 | * 4 | * description: easy-to-use tooltips for Flot charts 5 | * version: 0.6.2 6 | * author: Krzysztof Urbas @krzysu [myviews.pl] 7 | * website: https://github.com/krzysu/flot.tooltip 8 | * 9 | * build on 2013-09-30 10 | * released under MIT License, 2012 11 | */ 12 | (function(t){var o={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},i=function(t){this.tipPosition={x:0,y:0},this.init(t)};i.prototype.init=function(o){function i(t){var o={};o.x=t.pageX,o.y=t.pageY,s.updateTooltipPosition(o)}function e(t,o,i){var e=s.getDomElement();if(i){var n;n=s.stringFormat(s.tooltipOptions.content,i),e.html(n),s.updateTooltipPosition({x:o.pageX,y:o.pageY}),e.css({left:s.tipPosition.x+s.tooltipOptions.shifts.x,top:s.tipPosition.y+s.tooltipOptions.shifts.y}).show(),"function"==typeof s.tooltipOptions.onHover&&s.tooltipOptions.onHover(i,e)}else e.hide().html("")}var s=this;o.hooks.bindEvents.push(function(o,n){s.plotOptions=o.getOptions(),s.plotOptions.tooltip!==!1&&void 0!==s.plotOptions.tooltip&&(s.tooltipOptions=s.plotOptions.tooltipOpts,s.getDomElement(),t(o.getPlaceholder()).bind("plothover",e),t(n).bind("mousemove",i))}),o.hooks.shutdown.push(function(o,s){t(o.getPlaceholder()).unbind("plothover",e),t(s).unbind("mousemove",i)})},i.prototype.getDomElement=function(){var o;return t("#flotTip").length>0?o=t("#flotTip"):(o=t("
").attr("id","flotTip"),o.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&o.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),o},i.prototype.updateTooltipPosition=function(o){var i=t("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,e=t("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;o.x-t(window).scrollLeft()>t(window).innerWidth()-i&&(o.x-=i),o.y-t(window).scrollTop()>t(window).innerHeight()-e&&(o.y-=e),this.tipPosition.x=o.x,this.tipPosition.y=o.y},i.prototype.stringFormat=function(t,o){var i=/%p\.{0,1}(\d{0,})/,e=/%s/,s=/%x\.{0,1}(?:\d{0,})/,n=/%y\.{0,1}(?:\d{0,})/;return"function"==typeof t&&(t=t(o.series.label,o.series.data[o.dataIndex][0],o.series.data[o.dataIndex][1],o)),o.series.percent!==void 0&&(t=this.adjustValPrecision(i,t,o.series.percent)),o.series.label!==void 0&&(t=t.replace(e,o.series.label)),this.isTimeMode("xaxis",o)&&this.isXDateFormat(o)&&(t=t.replace(s,this.timestampToDate(o.series.data[o.dataIndex][0],this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",o)&&this.isYDateFormat(o)&&(t=t.replace(n,this.timestampToDate(o.series.data[o.dataIndex][1],this.tooltipOptions.yDateFormat))),"number"==typeof o.series.data[o.dataIndex][0]&&(t=this.adjustValPrecision(s,t,o.series.data[o.dataIndex][0])),"number"==typeof o.series.data[o.dataIndex][1]&&(t=this.adjustValPrecision(n,t,o.series.data[o.dataIndex][1])),o.series.xaxis.tickFormatter!==void 0&&(t=t.replace(s,o.series.xaxis.tickFormatter(o.series.data[o.dataIndex][0],o.series.xaxis))),o.series.yaxis.tickFormatter!==void 0&&(t=t.replace(n,o.series.yaxis.tickFormatter(o.series.data[o.dataIndex][1],o.series.yaxis))),t},i.prototype.isTimeMode=function(t,o){return o.series[t].options.mode!==void 0&&"time"===o.series[t].options.mode},i.prototype.isXDateFormat=function(){return this.tooltipOptions.xDateFormat!==void 0&&null!==this.tooltipOptions.xDateFormat},i.prototype.isYDateFormat=function(){return this.tooltipOptions.yDateFormat!==void 0&&null!==this.tooltipOptions.yDateFormat},i.prototype.timestampToDate=function(o,i){var e=new Date(o);return t.plot.formatDate(e,i)},i.prototype.adjustValPrecision=function(t,o,i){var e,s=o.match(t);return null!==s&&""!==RegExp.$1&&(e=RegExp.$1,i=i.toFixed(e),o=o.replace(t,i)),o};var e=function(t){new i(t)};t.plot.plugins.push({init:e,options:o,name:"tooltip",version:"0.6.1"})})(jQuery); -------------------------------------------------------------------------------- /static/js/plugins/gritter/images/gritter-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/js/plugins/gritter/images/gritter-light.png -------------------------------------------------------------------------------- /static/js/plugins/gritter/images/gritter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/js/plugins/gritter/images/gritter.png -------------------------------------------------------------------------------- /static/js/plugins/gritter/images/ie-spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hequan2017/cmdb/efd14a3053fe80900d91eec1dd64907e1e48c56b/static/js/plugins/gritter/images/ie-spacer.gif -------------------------------------------------------------------------------- /static/js/plugins/gritter/jquery.gritter.css: -------------------------------------------------------------------------------- 1 | /* the norm */ 2 | #gritter-notice-wrapper { 3 | position:fixed; 4 | top:40px; 5 | right:20px; 6 | width:301px; 7 | z-index:9999; 8 | 9 | -webkit-animation-duration: 1s; 10 | animation-duration: 1s; 11 | -webkit-animation-fill-mode: both; 12 | animation-fill-mode: both; 13 | 14 | -webkit-animation-name: bounceIn; 15 | animation-name: bounceIn; 16 | } 17 | @keyframes bounceIn { 18 | 0% { 19 | opacity: 0; 20 | -webkit-transform: scale(.3); 21 | -ms-transform: scale(.3); 22 | transform: scale(.3); 23 | } 24 | 25 | 50% { 26 | opacity: 1; 27 | -webkit-transform: scale(1.05); 28 | -ms-transform: scale(1.05); 29 | transform: scale(1.05); 30 | } 31 | 32 | 70% { 33 | -webkit-transform: scale(.9); 34 | -ms-transform: scale(.9); 35 | transform: scale(.9); 36 | } 37 | 38 | 100% { 39 | opacity: 1; 40 | -webkit-transform: scale(1); 41 | -ms-transform: scale(1); 42 | transform: scale(1); 43 | } 44 | } 45 | #gritter-notice-wrapper.top-left { 46 | left: 20px; 47 | right: auto; 48 | } 49 | #gritter-notice-wrapper.bottom-right { 50 | top: auto; 51 | left: auto; 52 | bottom: 20px; 53 | right: 20px; 54 | } 55 | #gritter-notice-wrapper.bottom-left { 56 | top: auto; 57 | right: auto; 58 | bottom: 20px; 59 | left: 20px; 60 | } 61 | .gritter-item-wrapper { 62 | position:relative; 63 | margin:0 0 10px 0; 64 | background:url('images/ie-spacer.gif'); /* ie7/8 fix */ 65 | } 66 | 67 | .hover .gritter-top { 68 | /*background-position:right -30px;*/ 69 | } 70 | .gritter-bottom { 71 | height:8px; 72 | margin:0; 73 | } 74 | 75 | .gritter-item { 76 | display:block; 77 | background-color: rgba(39,58,75,0.8); 78 | border-radius: 4px; 79 | color:#eee; 80 | padding:10px 11px 10px 11px; 81 | font-size: 11px; 82 | } 83 | .hover .gritter-item { 84 | background-position:right -40px; 85 | } 86 | .gritter-item p { 87 | padding:0; 88 | margin:0; 89 | word-wrap:break-word; 90 | } 91 | 92 | .gritter-item a:hover { 93 | color: #f8ac59; 94 | text-decoration: underline; 95 | } 96 | .gritter-close { 97 | display:none; 98 | position:absolute; 99 | top:5px; 100 | right:3px; 101 | background:url(images/gritter.png) no-repeat left top; 102 | cursor:pointer; 103 | width:30px; 104 | height:30px; 105 | text-indent:-9999em; 106 | } 107 | .gritter-title { 108 | font-size:12px; 109 | font-weight:bold; 110 | padding:0 0 7px 0; 111 | display:block; 112 | text-transform: uppercase; 113 | } 114 | .gritter-image { 115 | width:48px; 116 | height:48px; 117 | float:left; 118 | } 119 | .gritter-with-image, 120 | .gritter-without-image { 121 | padding:0; 122 | } 123 | .gritter-with-image { 124 | width:220px; 125 | float:right; 126 | } 127 | /* for the light (white) version of the gritter notice */ 128 | .gritter-light .gritter-item, 129 | .gritter-light .gritter-bottom, 130 | .gritter-light .gritter-top, 131 | .gritter-light .gritter-close { 132 | background-image: url(images/gritter-light.png); 133 | color: #222; 134 | } 135 | .gritter-light .gritter-title { 136 | text-shadow: none; 137 | } 138 | -------------------------------------------------------------------------------- /static/js/plugins/gritter/jquery.gritter.min.js: -------------------------------------------------------------------------------- 1 | (function(b){b.gritter={};b.gritter.options={position:"",class_name:"",fade_in_speed:"medium",fade_out_speed:1000,time:6000};b.gritter.add=function(f){try{return a.add(f||{})}catch(d){var c="Gritter Error: "+d;(typeof(console)!="undefined"&&console.error)?console.error(c,f):alert(c)}};b.gritter.remove=function(d,c){a.removeSpecific(d,c||{})};b.gritter.removeAll=function(c){a.stop(c||{})};var a={position:"",fade_in_speed:"",fade_out_speed:"",time:"",_custom_timer:0,_item_count:0,_is_setup:0,_tpl_close:'Close Notification',_tpl_title:'[[title]]',_tpl_item:'',_tpl_wrap:'
',add:function(g){if(typeof(g)=="string"){g={text:g}}if(g.text===null){throw'You must supply "text" parameter.'}if(!this._is_setup){this._runSetup()}var k=g.title,n=g.text,e=g.image||"",l=g.sticky||false,m=g.class_name||b.gritter.options.class_name,j=b.gritter.options.position,d=g.time||"";this._verifyWrapper();this._item_count++;var f=this._item_count,i=this._tpl_item;b(["before_open","after_open","before_close","after_close"]).each(function(p,q){a["_"+q+"_"+f]=(b.isFunction(g[q]))?g[q]:function(){}});this._custom_timer=0;if(d){this._custom_timer=d}var c=(e!="")?'image':"",h=(e!="")?"gritter-with-image":"gritter-without-image";if(k){k=this._str_replace("[[title]]",k,this._tpl_title)}else{k=""}i=this._str_replace(["[[title]]","[[text]]","[[close]]","[[image]]","[[number]]","[[class_name]]","[[item_class]]"],[k,n,this._tpl_close,c,this._item_count,h,m],i);if(this["_before_open_"+f]()===false){return false}b("#gritter-notice-wrapper").addClass(j).append(i);var o=b("#gritter-item-"+this._item_count);o.fadeIn(this.fade_in_speed,function(){a["_after_open_"+f](b(this))});if(!l){this._setFadeTimer(o,f)}b(o).bind("mouseenter mouseleave",function(p){if(p.type=="mouseenter"){if(!l){a._restoreItemIfFading(b(this),f)}}else{if(!l){a._setFadeTimer(b(this),f)}}a._hoverState(b(this),p.type)});b(o).find(".gritter-close").click(function(){a.removeSpecific(f,{},null,true);return false;});return f},_countRemoveWrapper:function(c,d,f){d.remove();this["_after_close_"+c](d,f);if(b(".gritter-item-wrapper").length==0){b("#gritter-notice-wrapper").remove()}},_fade:function(g,d,j,f){var j=j||{},i=(typeof(j.fade)!="undefined")?j.fade:true,c=j.speed||this.fade_out_speed,h=f;this["_before_close_"+d](g,h);if(f){g.unbind("mouseenter mouseleave")}if(i){g.animate({opacity:0},c,function(){g.animate({height:0},300,function(){a._countRemoveWrapper(d,g,h)})})}else{this._countRemoveWrapper(d,g)}},_hoverState:function(d,c){if(c=="mouseenter"){d.addClass("hover");d.find(".gritter-close").show()}else{d.removeClass("hover");d.find(".gritter-close").hide()}},removeSpecific:function(c,g,f,d){if(!f){var f=b("#gritter-item-"+c)}this._fade(f,c,g||{},d)},_restoreItemIfFading:function(d,c){clearTimeout(this["_int_id_"+c]);d.stop().css({opacity:"",height:""})},_runSetup:function(){for(opt in b.gritter.options){this[opt]=b.gritter.options[opt]}this._is_setup=1},_setFadeTimer:function(f,d){var c=(this._custom_timer)?this._custom_timer:this.time;this["_int_id_"+d]=setTimeout(function(){a._fade(f,d)},c)},stop:function(e){var c=(b.isFunction(e.before_close))?e.before_close:function(){};var f=(b.isFunction(e.after_close))?e.after_close:function(){};var d=b("#gritter-notice-wrapper");c(d);d.fadeOut(function(){b(this).remove();f()})},_str_replace:function(v,e,o,n){var k=0,h=0,t="",m="",g=0,q=0,l=[].concat(v),c=[].concat(e),u=o,d=c instanceof Array,p=u instanceof Array;u=[].concat(u);if(n){this.window[n]=0}for(k=0,g=u.length;kp&&(p=-50);g(this);return c.each(function(){var a=f(this);E(a);var c=this, 8 | b=c.id,g=-p+"%",d=100+2*p+"%",d={position:"absolute",top:g,left:g,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},g=_mobile?{position:"absolute",visibility:"hidden"}:p?d:{position:"absolute",opacity:0},l="checkbox"==c[_type]?e.checkboxClass||"icheckbox":e.radioClass||"i"+r,z=f(_label+'[for="'+b+'"]').add(a.closest(_label)),u=!!e.aria,y=m+"-"+Math.random().toString(36).substr(2,6),h='
")[_callback]("ifCreated").parent().append(e.insert);d=f('').css(d).appendTo(h);a.data(m,{o:e,s:a.attr("style")}).css(g);e.inheritClass&&h[_add](c.className||"");e.inheritID&&b&&h.attr("id",m+"-"+b);"static"==h.css("position")&&h.css("position","relative");A(a,!0,_update);if(z.length)z.on(_click+".i mouseover.i mouseout.i "+_touch,function(b){var d=b[_type],e=f(this);if(!c[n]){if(d==_click){if(f(b.target).is("a"))return; 10 | A(a,!1,!0)}else B&&(/ut|nd/.test(d)?(h[_remove](v),e[_remove](w)):(h[_add](v),e[_add](w)));if(_mobile)b.stopPropagation();else return!1}});a.on(_click+".i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[_type];b=b.keyCode;if(d==_click)return!1;if("keydown"==d&&32==b)return c[_type]==r&&c[k]||(c[k]?q(a,k):x(a,k)),!1;if("keyup"==d&&c[_type]==r)!c[k]&&x(a,k);else if(/us|ur/.test(d))h["blur"==d?_remove:_add](s)});d.on(_click+" mousedown mouseup mouseover mouseout "+_touch,function(b){var d= 11 | b[_type],e=/wn|up/.test(d)?t:v;if(!c[n]){if(d==_click)A(a,!1,!0);else{if(/wn|er|in/.test(d))h[_add](e);else h[_remove](e+" "+t);if(z.length&&B&&e==v)z[/ut|nd/.test(d)?_remove:_add](w)}if(_mobile)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto); 12 | -------------------------------------------------------------------------------- /static/js/plugins/idle-timer/idle-timer.min.js: -------------------------------------------------------------------------------- 1 | /*! Idle Timer v1.0.1 2014-03-21 | https://github.com/thorst/jquery-idletimer | (c) 2014 Paul Irish | Licensed MIT */ 2 | !function(a){a.idleTimer=function(b,c){var d;"object"==typeof b?(d=b,b=null):"number"==typeof b&&(d={timeout:b},b=null),c=c||document,d=a.extend({idle:!1,timeout:3e4,events:"mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove"},d);var e=a(c),f=e.data("idleTimerObj")||{},g=function(b){var d=a.data(c,"idleTimerObj")||{};d.idle=!d.idle,d.olddate=+new Date;var e=a.Event((d.idle?"idle":"active")+".idleTimer");a(c).trigger(e,[c,a.extend({},d),b])},h=function(b){var d=a.data(c,"idleTimerObj")||{};if(null==d.remaining){if("mousemove"===b.type){if(b.pageX===d.pageX&&b.pageY===d.pageY)return;if("undefined"==typeof b.pageX&&"undefined"==typeof b.pageY)return;var e=+new Date-d.olddate;if(200>e)return}clearTimeout(d.tId),d.idle&&g(b),d.lastActive=+new Date,d.pageX=b.pageX,d.pageY=b.pageY,d.tId=setTimeout(g,d.timeout)}},i=function(){var b=a.data(c,"idleTimerObj")||{};b.idle=b.idleBackup,b.olddate=+new Date,b.lastActive=b.olddate,b.remaining=null,clearTimeout(b.tId),b.idle||(b.tId=setTimeout(g,b.timeout))},j=function(){var b=a.data(c,"idleTimerObj")||{};null==b.remaining&&(b.remaining=b.timeout-(+new Date-b.olddate),clearTimeout(b.tId))},k=function(){var b=a.data(c,"idleTimerObj")||{};null!=b.remaining&&(b.idle||(b.tId=setTimeout(g,b.remaining)),b.remaining=null)},l=function(){var b=a.data(c,"idleTimerObj")||{};clearTimeout(b.tId),e.removeData("idleTimerObj"),e.off("._idleTimer")},m=function(){var b=a.data(c,"idleTimerObj")||{};if(b.idle)return 0;if(null!=b.remaining)return b.remaining;var d=b.timeout-(+new Date-b.lastActive);return 0>d&&(d=0),d};if(null===b&&"undefined"!=typeof f.idle)return i(),e;if(null===b);else{if(null!==b&&"undefined"==typeof f.idle)return!1;if("destroy"===b)return l(),e;if("pause"===b)return j(),e;if("resume"===b)return k(),e;if("reset"===b)return i(),e;if("getRemainingTime"===b)return m();if("getElapsedTime"===b)return+new Date-f.olddate;if("getLastActiveTime"===b)return f.lastActive;if("isIdle"===b)return f.idle}return e.on(a.trim((d.events+" ").split(" ").join("._idleTimer ")),function(a){h(a)}),f=a.extend({},{olddate:+new Date,lastActive:+new Date,idle:d.idle,idleBackup:d.idle,timeout:d.timeout,remaining:null,tId:null,pageX:null,pageY:null}),f.idle||(f.tId=setTimeout(g,f.timeout)),a.data(c,"idleTimerObj",f),e},a.fn.idleTimer=function(b){return this[0]?a.idleTimer(b,this[0]):this}}(jQuery); -------------------------------------------------------------------------------- /static/js/plugins/ladda/ladda.jquery.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Ladda for jQuery 3 | * http://lab.hakim.se/ladda 4 | * MIT licensed 5 | * 6 | * Copyright (C) 2015 Hakim El Hattab, http://hakim.se 7 | */ 8 | (function(t,e){if(void 0===e)return console.error("jQuery required for Ladda.jQuery");var i=[];e=e.extend(e,{ladda:function(e){"stopAll"===e&&t.stopAll()}}),e.fn=e.extend(e.fn,{ladda:function(n){var r=i.slice.call(arguments,1);return"bind"===n?(r.unshift(e(this).selector),t.bind.apply(t,r)):e(this).each(function(){var i,o=e(this);void 0===n?o.data("ladda",t.create(this)):(i=o.data("ladda"),i[n].apply(i,r))}),this}})})(this.Ladda,this.jQuery); -------------------------------------------------------------------------------- /static/js/plugins/ladda/ladda.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Ladda 0.9.8 (2015-03-19, 17:22) 3 | * http://lab.hakim.se/ladda 4 | * MIT licensed 5 | * 6 | * Copyright (C) 2015 Hakim El Hattab, http://hakim.se 7 | */ 8 | (function(t,e){"object"==typeof exports?module.exports=e(require("spin.js")):"function"==typeof define&&define.amd?define(["spin.min.js"],e):t.Ladda=e(t.Spinner)})(this,function(t){"use strict";function e(t){if(t===void 0)return console.warn("Ladda button target must be defined."),void 0;t.querySelector(".ladda-label")||(t.innerHTML=''+t.innerHTML+"");var e,n=t.querySelector(".ladda-spinner");n||(n=document.createElement("span"),n.className="ladda-spinner"),t.appendChild(n);var r,a={start:function(){return e||(e=o(t)),t.setAttribute("disabled",""),t.setAttribute("data-loading",""),clearTimeout(r),e.spin(n),this.setProgress(0),this},startAfter:function(t){return clearTimeout(r),r=setTimeout(function(){a.start()},t),this},stop:function(){return t.removeAttribute("disabled"),t.removeAttribute("data-loading"),clearTimeout(r),e&&(r=setTimeout(function(){e.stop()},1e3)),this},toggle:function(){return this.isLoading()?this.stop():this.start(),this},setProgress:function(e){e=Math.max(Math.min(e,1),0);var n=t.querySelector(".ladda-progress");0===e&&n&&n.parentNode?n.parentNode.removeChild(n):(n||(n=document.createElement("div"),n.className="ladda-progress",t.appendChild(n)),n.style.width=(e||0)*t.offsetWidth+"px")},enable:function(){return this.stop(),this},disable:function(){return this.stop(),t.setAttribute("disabled",""),this},isLoading:function(){return t.hasAttribute("data-loading")},remove:function(){clearTimeout(r),t.removeAttribute("disabled",""),t.removeAttribute("data-loading",""),e&&(e.stop(),e=null);for(var n=0,i=u.length;i>n;n++)if(a===u[n]){u.splice(n,1);break}}};return u.push(a),a}function n(t,e){for(;t.parentNode&&t.tagName!==e;)t=t.parentNode;return e===t.tagName?t:void 0}function r(t){for(var e=["input","textarea","select"],n=[],r=0;e.length>r;r++)for(var a=t.getElementsByTagName(e[r]),i=0;a.length>i;i++)a[i].hasAttribute("required")&&n.push(a[i]);return n}function a(t,a){a=a||{};var i=[];"string"==typeof t?i=s(document.querySelectorAll(t)):"object"==typeof t&&"string"==typeof t.nodeName&&(i=[t]);for(var o=0,u=i.length;u>o;o++)(function(){var t=i[o];if("function"==typeof t.addEventListener){var s=e(t),u=-1;t.addEventListener("click",function(){var e=!0,i=n(t,"FORM");if(i!==void 0)for(var o=r(i),d=0;o.length>d;d++)""===o[d].value.replace(/^\s+|\s+$/g,"")&&(e=!1),"checkbox"!==o[d].type&&"radio"!==o[d].type||o[d].checked||(e=!1),"email"===o[d].type&&(e=/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(o[d].value));e&&(s.startAfter(1),"number"==typeof a.timeout&&(clearTimeout(u),u=setTimeout(s.stop,a.timeout)),"function"==typeof a.callback&&a.callback.apply(null,[s]))},!1)}})()}function i(){for(var t=0,e=u.length;e>t;t++)u[t].stop()}function o(e){var n,r=e.offsetHeight;0===r&&(r=parseFloat(window.getComputedStyle(e).height)),r>32&&(r*=.8),e.hasAttribute("data-spinner-size")&&(r=parseInt(e.getAttribute("data-spinner-size"),10)),e.hasAttribute("data-spinner-color")&&(n=e.getAttribute("data-spinner-color"));var a=12,i=.2*r,o=.6*i,s=7>i?2:3;return new t({color:n||"#fff",lines:a,radius:i,length:o,width:s,zIndex:"auto",top:"auto",left:"auto",className:""})}function s(t){for(var e=[],n=0;t.length>n;n++)e.push(t[n]);return e}var u=[];return{bind:a,create:e,stopAll:i}}); -------------------------------------------------------------------------------- /static/js/plugins/ladda/spin.min.js: -------------------------------------------------------------------------------- 1 | (function(t,e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Spinner=e()})(this,function(){"use strict";function t(t,e){var i,n=document.createElement(t||"div");for(i in e)n[i]=e[i];return n}function e(t){for(var e=1,i=arguments.length;i>e;e++)t.appendChild(arguments[e]);return t}function i(t,e,i,n){var r=["opacity",e,~~(100*t),i,n].join("-"),o=.01+100*(i/n),a=Math.max(1-(1-t)/e*(100-o),t),s=u.substring(0,u.indexOf("Animation")).toLowerCase(),l=s&&"-"+s+"-"||"";return c[r]||(p.insertRule("@"+l+"keyframes "+r+"{"+"0%{opacity:"+a+"}"+o+"%{opacity:"+t+"}"+(o+.01)+"%{opacity:1}"+(o+e)%100+"%{opacity:"+t+"}"+"100%{opacity:"+a+"}"+"}",p.cssRules.length),c[r]=1),r}function n(t,e){var i,n,r=t.style;for(e=e.charAt(0).toUpperCase()+e.slice(1),n=0;d.length>n;n++)if(i=d[n]+e,void 0!==r[i])return i;return void 0!==r[e]?e:void 0}function r(t,e){for(var i in e)t.style[n(t,i)||i]=e[i];return t}function o(t){for(var e=1;arguments.length>e;e++){var i=arguments[e];for(var n in i)void 0===t[n]&&(t[n]=i[n])}return t}function a(t,e){return"string"==typeof t?t:t[e%t.length]}function s(t){this.opts=o(t||{},s.defaults,f)}function l(){function i(e,i){return t("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',i)}p.addRule(".spin-vml","behavior:url(#default#VML)"),s.prototype.lines=function(t,n){function o(){return r(i("group",{coordsize:d+" "+d,coordorigin:-u+" "+-u}),{width:d,height:d})}function s(t,s,l){e(p,e(r(o(),{rotation:360/n.lines*t+"deg",left:~~s}),e(r(i("roundrect",{arcsize:n.corners}),{width:u,height:n.width,left:n.radius,top:-n.width>>1,filter:l}),i("fill",{color:a(n.color,t),opacity:n.opacity}),i("stroke",{opacity:0}))))}var l,u=n.length+n.width,d=2*u,c=2*-(n.width+n.length)+"px",p=r(o(),{position:"absolute",top:c,left:c});if(n.shadow)for(l=1;n.lines>=l;l++)s(l,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(l=1;n.lines>=l;l++)s(l);return e(t,p)},s.prototype.opacity=function(t,e,i,n){var r=t.firstChild;n=n.shadow&&n.lines||0,r&&r.childNodes.length>e+n&&(r=r.childNodes[e+n],r=r&&r.firstChild,r=r&&r.firstChild,r&&(r.opacity=i))}}var u,d=["webkit","Moz","ms","O"],c={},p=function(){var i=t("style",{type:"text/css"});return e(document.getElementsByTagName("head")[0],i),i.sheet||i.styleSheet}(),f={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"50%",left:"50%",position:"absolute"};s.defaults={},o(s.prototype,{spin:function(e){this.stop();var i=this,n=i.opts,o=i.el=r(t(0,{className:n.className}),{position:n.position,width:0,zIndex:n.zIndex});if(n.radius+n.length+n.width,r(o,{left:n.left,top:n.top}),e&&e.insertBefore(o,e.firstChild||null),o.setAttribute("role","progressbar"),i.lines(o,i.opts),!u){var a,s=0,l=(n.lines-1)*(1-n.direction)/2,d=n.fps,c=d/n.speed,p=(1-n.opacity)/(c*n.trail/100),f=c/n.lines;(function h(){s++;for(var t=0;n.lines>t;t++)a=Math.max(1-(s+(n.lines-t)*f)%c*p,n.opacity),i.opacity(o,t*n.direction+l,a,n);i.timeout=i.el&&setTimeout(h,~~(1e3/d))})()}return i},stop:function(){var t=this.el;return t&&(clearTimeout(this.timeout),t.parentNode&&t.parentNode.removeChild(t),this.el=void 0),this},lines:function(n,o){function s(e,i){return r(t(),{position:"absolute",width:o.length+o.width+"px",height:o.width+"px",background:e,boxShadow:i,transformOrigin:"left",transform:"rotate("+~~(360/o.lines*d+o.rotate)+"deg) translate("+o.radius+"px"+",0)",borderRadius:(o.corners*o.width>>1)+"px"})}for(var l,d=0,c=(o.lines-1)*(1-o.direction)/2;o.lines>d;d++)l=r(t(),{position:"absolute",top:1+~(o.width/2)+"px",transform:o.hwaccel?"translate3d(0,0,0)":"",opacity:o.opacity,animation:u&&i(o.opacity,o.trail,c+d*o.direction,o.lines)+" "+1/o.speed+"s linear infinite"}),o.shadow&&e(l,r(s("#000","0 0 4px #000"),{top:"2px"})),e(n,e(l,s(a(o.color,d),"0 0 1px rgba(0,0,0,.1)")));return n},opacity:function(t,e,i){t.childNodes.length>e&&(t.childNodes[e].style.opacity=i)}});var h=r(t("group"),{behavior:"url(#default#VML)"});return!n(h,"transform")&&h.adj?l():u=n(h,"animation"),s}); -------------------------------------------------------------------------------- /static/js/plugins/metisMenu/jquery.metisMenu.js: -------------------------------------------------------------------------------- 1 | /* 2 | * metismenu - v2.0.2 3 | * A jQuery menu plugin 4 | * https://github.com/onokumus/metisMenu 5 | * 6 | * Made by Osman Nuri Okumus 7 | * Under MIT License 8 | */ 9 | 10 | !function(a){"use strict";function b(){var a=document.createElement("mm"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}function c(b){return this.each(function(){var c=a(this),d=c.data("mm"),f=a.extend({},e.DEFAULTS,c.data(),"object"==typeof b&&b);d||c.data("mm",d=new e(this,f)),"string"==typeof b&&d[b]()})}a.fn.emulateTransitionEnd=function(b){var c=!1,e=this;a(this).one("mmTransitionEnd",function(){c=!0});var f=function(){c||a(e).trigger(d.end)};return setTimeout(f,b),this};var d=b();d&&(a.event.special.mmTransitionEnd={bindType:d.end,delegateType:d.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}});var e=function(b,c){this.$element=a(b),this.options=a.extend({},e.DEFAULTS,c),this.transitioning=null,this.init()};e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0,doubleTapToGo:!1,activeClass:"active"},e.prototype.init=function(){var b=this,c=this.options.activeClass;this.$element.find("li."+c).has("ul").children("ul").addClass("collapse in"),this.$element.find("li").not("."+c).has("ul").children("ul").addClass("collapse"),this.options.doubleTapToGo&&this.$element.find("li."+c).has("ul").children("a").addClass("doubleTapToGo"),this.$element.find("li").has("ul").children("a").on("click.metisMenu",function(d){var e=a(this),f=e.parent("li"),g=f.children("ul");return d.preventDefault(),f.hasClass(c)?b.hide(g):b.show(g),b.options.doubleTapToGo&&b.doubleTapToGo(e)&&"#"!==e.attr("href")&&""!==e.attr("href")?(d.stopPropagation(),void(document.location=e.attr("href"))):void 0})},e.prototype.doubleTapToGo=function(a){var b=this.$element;return a.hasClass("doubleTapToGo")?(a.removeClass("doubleTapToGo"),!0):a.parent().children("ul").length?(b.find(".doubleTapToGo").removeClass("doubleTapToGo"),a.addClass("doubleTapToGo"),!1):void 0},e.prototype.show=function(b){var c=this.options.activeClass,f=a(b),g=f.parent("li");if(!this.transitioning&&!f.hasClass("in")){g.addClass(c),this.options.toggle&&this.hide(g.siblings().children("ul.in")),f.removeClass("collapse").addClass("collapsing").height(0),this.transitioning=1;var h=function(){f.removeClass("collapsing").addClass("collapse in").height(""),this.transitioning=0};return d?void f.one("mmTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(e.TRANSITION_DURATION).height(f[0].scrollHeight):h.call(this)}},e.prototype.hide=function(b){var c=this.options.activeClass,f=a(b);if(!this.transitioning&&f.hasClass("in")){f.parent("li").removeClass(c),f.height(f.height())[0].offsetHeight,f.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var g=function(){this.transitioning=0,f.removeClass("collapsing").addClass("collapse")};return d?void f.height(0).one("mmTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(e.TRANSITION_DURATION):g.call(this)}};var f=a.fn.metisMenu;a.fn.metisMenu=c,a.fn.metisMenu.Constructor=e,a.fn.metisMenu.noConflict=function(){return a.fn.metisMenu=f,this}}(jQuery); -------------------------------------------------------------------------------- /static/js/plugins/peity/jquery.peity.min.js: -------------------------------------------------------------------------------- 1 | // Peity jQuery plugin version 2.0.3 2 | // (c) 2014 Ben Pickles 3 | // 4 | // http://benpickles.github.io/peity 5 | // 6 | // Released under MIT license. 7 | (function(e,q,h){var o=function(a,b){var c=q.createElementNS("http://www.w3.org/2000/svg",a);e.each(b,function(a,b){c.setAttribute(a,b)});return c},t="createElementNS"in q&&o("svg",{}).createSVGRect,r=1/(window.devicePixelRatio||1),j=e.fn.peity=function(a,b){t&&this.each(function(){var c=e(this),d=c.data("peity");if(d)a&&(d.type=a),e.extend(d.opts,b);else{var f=j.defaults[a],g={};e.each(c.data(),function(a,b){a in f&&(g[a]=b)});var h=e.extend({},f,g,b),d=new s(c,a,h);c.change(function(){d.draw()}).data("peity", 8 | d)}d.draw()});return this},s=function(a,b,c){this.$el=a;this.type=b;this.opts=c},m=s.prototype;m.draw=function(){j.graphers[this.type].call(this,this.opts)};m.fill=function(){var a=this.opts.fill,b=a;e.isFunction(b)||(b=function(b,d){return a[d%a.length]});return b};m.prepare=function(a,b){var c;this.svg?c=e(this.svg).empty():(this.svg=o("svg",{"class":"peity"}),this.$el.hide().after(this.svg),c=e(this.svg).data("peity",this));this.svg.setAttribute("height",b);this.svg.setAttribute("width",a);return c}; 9 | m.values=function(){return e.map(this.$el.text().split(this.opts.delimiter),function(a){return parseFloat(a)})};j.defaults={};j.graphers={};j.register=function(a,b,c){this.defaults[a]=b;this.graphers[a]=c};j.register("pie",{delimiter:null,diameter:16,fill:["#ff9900","#fff4dd","#ffc66e"]},function(a){if(!a.delimiter){var b=this.$el.text().match(/[^0-9\.]/);a.delimiter=b?b[0]:","}b=this.values();if("/"==a.delimiter)var c=b[0],b=[c,h.max(0,b[1]-c)];for(var d=0,c=b.length,f=0;de?1:0,1,q,r,"Z"].join(" ")});i=l}k.setAttribute("fill",j.call(this,n,d,b));this.svg.appendChild(k)}}});j.register("line",{delimiter:",",fill:"#c6d9fd",height:16,max:null, 11 | min:0,stroke:"#4d89f9",strokeWidth:1,width:32},function(a){var b=this.values();1==b.length&&b.push(b[0]);for(var c=h.max.apply(h,b.concat([a.max])),d=h.min.apply(h,b.concat([a.min])),f=this.prepare(a.width,a.height),g=f.width(),f=f.height()-a.strokeWidth,e=g/(b.length-1),c=c-d,j=0==c?f:f/c,m=f+d*j,c=[0,m],i=0;i=d&&0k&&(l+=k,k=-k);n=o("rect",{fill:m.call(this,n,i,b),x:i*g,y:l,width:g-a,height:k});this.svg.appendChild(n)}})})(jQuery,document,Math); 14 | -------------------------------------------------------------------------------- /static/js/plugins/preetyTextDiff/jquery.pretty-text-diff.min.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.7.1 2 | 3 | /* 4 | @preserve jQuery.PrettyTextDiff 1.0.4 5 | See https://github.com/arnab/jQuery.PrettyTextDiff/ 6 | */ 7 | 8 | (function() { 9 | var $; 10 | 11 | $ = jQuery; 12 | 13 | $.fn.extend({ 14 | prettyTextDiff: function(options) { 15 | var dmp, settings; 16 | settings = { 17 | originalContainer: ".original", 18 | changedContainer: ".changed", 19 | diffContainer: ".diff", 20 | cleanup: true, 21 | debug: false 22 | }; 23 | settings = $.extend(settings, options); 24 | $.fn.prettyTextDiff.debug("Options: ", settings, settings); 25 | dmp = new diff_match_patch(); 26 | return this.each(function() { 27 | var changed, diff_as_html, diffs, original; 28 | if (settings.originalContent && settings.changedContent) { 29 | original = $('
').html(settings.originalContent).text(); 30 | changed = $('
').html(settings.changedContent).text(); 31 | } else { 32 | original = $(settings.originalContainer, this).text(); 33 | changed = $(settings.changedContainer, this).text(); 34 | } 35 | $.fn.prettyTextDiff.debug("Original text found: ", original, settings); 36 | $.fn.prettyTextDiff.debug("Changed text found: ", changed, settings); 37 | diffs = dmp.diff_main(original, changed); 38 | if (settings.cleanup) { 39 | dmp.diff_cleanupSemantic(diffs); 40 | } 41 | $.fn.prettyTextDiff.debug("Diffs: ", diffs, settings); 42 | diff_as_html = $.map(diffs, function(diff) { 43 | return $.fn.prettyTextDiff.createHTML(diff); 44 | }); 45 | $(settings.diffContainer, this).html(diff_as_html.join('')); 46 | return this; 47 | }); 48 | } 49 | }); 50 | 51 | $.fn.prettyTextDiff.debug = function(message, object, settings) { 52 | if (settings.debug) { 53 | return console.log(message, object); 54 | } 55 | }; 56 | 57 | $.fn.prettyTextDiff.createHTML = function(diff) { 58 | var data, html, operation, pattern_amp, pattern_gt, pattern_lt, pattern_para, text; 59 | html = []; 60 | pattern_amp = /&/g; 61 | pattern_lt = //g; 63 | pattern_para = /\n/g; 64 | operation = diff[0], data = diff[1]; 65 | text = data.replace(pattern_amp, '&').replace(pattern_lt, '<').replace(pattern_gt, '>').replace(pattern_para, '
'); 66 | switch (operation) { 67 | case DIFF_INSERT: 68 | return '' + text + ''; 69 | case DIFF_DELETE: 70 | return '' + text + ''; 71 | case DIFF_EQUAL: 72 | return '' + text + ''; 73 | } 74 | }; 75 | 76 | }).call(this); 77 | -------------------------------------------------------------------------------- /static/js/plugins/slimscroll/jquery.slimscroll.min.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) 2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. 4 | * 5 | * Version: 1.3.6 6 | * 7 | */ 8 | (function(e){e.fn.extend({slimScroll:function(g){var a=e.extend({width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},g);this.each(function(){function v(d){if(r){d=d||window.event; 9 | var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&m(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function m(d,e,g){k=!1;var f=d,h=b.outerHeight()-c.outerHeight();e&&(f=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),f=Math.min(Math.max(f,0),h),f=0=b.outerHeight()?k=!0:(c.stop(!0, 11 | !0).fadeIn("fast"),a.railVisible&&h.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut("slow"),h.fadeOut("slow"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var n=b.scrollTop(),c=b.closest("."+a.barClass),h=b.closest("."+a.railClass);x();if(e.isPlainObject(g)){if("height"in g&&"auto"==g.height){b.parent().css("height","auto");b.css("height","auto");var q=b.parent().parent().height();b.parent().css("height", 12 | q);b.css("height",q)}if("scrollTo"in g)n=parseInt(a.scrollTo);else if("scrollBy"in g)n+=parseInt(a.scrollBy);else if("destroy"in g){c.remove();h.remove();b.unwrap();return}m(n,!1,!0)}}else if(!(e.isPlainObject(g)&&"destroy"in g)){a.height="auto"==a.height?b.parent().height():a.height;n=e("
").addClass(a.wrapperClass).css({position:"relative",overflow:"hidden",width:a.width,height:a.height});b.css({overflow:"hidden",width:a.width,height:a.height});var h=e("
").addClass(a.railClass).css({width:a.size, 13 | height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e("
").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible?"block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,WebkitBorderRadius:a.borderRadius,zIndex:99}),q="right"==a.position? 14 | {right:a.distance}:{left:a.distance};h.css(q);c.css(q);b.wrap(n);b.parent().append(c);b.parent().append(h);a.railDraggable&&c.bind("mousedown",function(a){var b=e(document);z=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);m(0,c.position().top,!1)});b.bind("mouseup.slimscroll",function(a){z=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll",function(a){a.stopPropagation();a.preventDefault();return!1}); 15 | h.hover(function(){w()},function(){p()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();p()},function(){r=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(m((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)});x();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}), 16 | m(0,!0)):"top"!==a.start&&(m(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener("DOMMouseScroll",v,!1),this.addEventListener("mousewheel",v,!1)):document.attachEvent("onmousewheel",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery); -------------------------------------------------------------------------------- /static/js/plugins/tinycon/tinycon.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Tinycon - A small library for manipulating the Favicon 3 | Tom Moor, http://tommoor.com 4 | Copyright (c) 2012 Tom Moor 5 | @license MIT Licensed 6 | @version 0.6.3 7 | */ 8 | (function(){var Tinycon={};var currentFavicon=null;var originalFavicon=null;var faviconImage=null;var canvas=null;var options={};var r=window.devicePixelRatio||1;var size=16*r;var defaults={width:7,height:9,font:10*r+'px arial',colour:'#ffffff',background:'#F03D25',fallback:true,crossOrigin:true,abbreviate:true};var ua=(function(){var agent=navigator.userAgent.toLowerCase();return function(browser){return agent.indexOf(browser)!==-1}}());var browser={ie:ua('msie'),chrome:ua('chrome'),webkit:ua('chrome')||ua('safari'),safari:ua('safari')&&!ua('chrome'),mozilla:ua('mozilla')&&!ua('chrome')&&!ua('safari')};var getFaviconTag=function(){var links=document.getElementsByTagName('link');for(var i=0,len=links.length;i0)drawBubble(context,label,colour);refreshFavicon()};if(!src.match(/^data/)&&options.crossOrigin){faviconImage.crossOrigin='anonymous'}faviconImage.src=src};var updateTitle=function(label){if(options.fallback){var originalTitle=document.title;if(originalTitle[0]==='('){originalTitle=originalTitle.slice(originalTitle.indexOf(' '))}if((label+'').length>0){document.title='('+label+') '+originalTitle}else{document.title=originalTitle}}};var drawBubble=function(context,label,colour){if(typeof label=='number'&&label>99&&options.abbreviate){label=abbreviateNumber(label)}var len=(label+'').length-1;var width=options.width*r+(6*r*len),height=options.height*r;var top=size-height,left=size-width-r,bottom=16*r,right=16*r,radius=2*r;context.font=(browser.webkit?'bold ':'')+options.font;context.fillStyle=options.background;context.strokeStyle=options.background;context.lineWidth=r;context.beginPath();context.moveTo(left+radius,top);context.quadraticCurveTo(left,top,left,top+radius);context.lineTo(left,bottom-radius);context.quadraticCurveTo(left,bottom,left+radius,bottom);context.lineTo(right-radius,bottom);context.quadraticCurveTo(right,bottom,right,bottom-radius);context.lineTo(right,top+radius);context.quadraticCurveTo(right,top,right-radius,top);context.closePath();context.fill();context.beginPath();context.strokeStyle="rgba(0,0,0,0.3)";context.moveTo(left+radius/2.0,bottom);context.lineTo(right-radius/2.0,bottom);context.stroke();context.fillStyle=options.colour;context.textAlign="right";context.textBaseline="top";context.fillText(label,r===2?29:15,browser.mozilla?7*r:6*r)};var refreshFavicon=function(){if(!getCanvas().getContext)return;setFaviconTag(getCanvas().toDataURL())};var abbreviateNumber=function(label){var metricPrefixes=[['G',1000000000],['M',1000000],['k',1000]];for(var i=0;i=metricPrefixes[i][1]){label=round(label/metricPrefixes[i][1])+metricPrefixes[i][0];break}}return label};var round=function(value,precision){var number=new Number(value);return number.toFixed(precision)};Tinycon.setOptions=function(custom){options={};for(var key in defaults){options[key]=custom.hasOwnProperty(key)?custom[key]:defaults[key]}return this};Tinycon.setImage=function(url){currentFavicon=url;refreshFavicon();return this};Tinycon.setBubble=function(label,colour){label=label||'';drawFavicon(label,colour);return this};Tinycon.reset=function(){setFaviconTag(originalFavicon)};Tinycon.setOptions(defaults);window.Tinycon=Tinycon;if(typeof define==='function'&&define.amd){define(Tinycon)}})(); -------------------------------------------------------------------------------- /static/js/plugins/toastr/toastr.min.js: -------------------------------------------------------------------------------- 1 | !function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return f({type:O.error,iconClass:g().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=g()),v=e("#"+t.containerId),v.length?v:(n&&(v=c(t)),v)}function i(e,t,n){return f({type:O.info,iconClass:g().iconClasses.info,message:e,optionsOverride:n,title:t})}function o(e){w=e}function s(e,t,n){return f({type:O.success,iconClass:g().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return f({type:O.warning,iconClass:g().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e){var t=g();v||n(t),l(e,t)||u(t)}function d(t){var i=g();return v||n(i),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function u(t){for(var n=v.children(),i=n.length-1;i>=0;i--)l(e(n[i]),t)}function l(t,n){return t&&0===e(":focus",t).length?(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0):!1}function c(t){return v=e("
").attr("id",t.containerId).addClass(t.positionClass).attr("aria-live","polite").attr("role","alert"),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",target:"body",closeHtml:'',newestOnTop:!0,preventDuplicates:!1,progressBar:!1}}function m(e){w&&w(e)}function f(t){function i(t){return!e(":focus",l).length||t?(clearTimeout(O.intervalId),l[r.hideMethod]({duration:r.hideDuration,easing:r.hideEasing,complete:function(){h(l),r.onHidden&&"hidden"!==b.state&&r.onHidden(),b.state="hidden",b.endTime=new Date,m(b)}})):void 0}function o(){(r.timeOut>0||r.extendedTimeOut>0)&&(u=setTimeout(i,r.extendedTimeOut),O.maxHideTime=parseFloat(r.extendedTimeOut),O.hideEta=(new Date).getTime()+O.maxHideTime)}function s(){clearTimeout(u),O.hideEta=0,l.stop(!0,!0)[r.showMethod]({duration:r.showDuration,easing:r.showEasing})}function a(){var e=(O.hideEta-(new Date).getTime())/O.maxHideTime*100;f.width(e+"%")}var r=g(),d=t.iconClass||r.iconClass;if("undefined"!=typeof t.optionsOverride&&(r=e.extend(r,t.optionsOverride),d=t.optionsOverride.iconClass||d),r.preventDuplicates){if(t.message===C)return;C=t.message}T++,v=n(r,!0);var u=null,l=e("
"),c=e("
"),p=e("
"),f=e("
"),w=e(r.closeHtml),O={intervalId:null,hideEta:null,maxHideTime:null},b={toastId:T,state:"visible",startTime:new Date,options:r,map:t};return t.iconClass&&l.addClass(r.toastClass).addClass(d),t.title&&(c.append(t.title).addClass(r.titleClass),l.append(c)),t.message&&(p.append(t.message).addClass(r.messageClass),l.append(p)),r.closeButton&&(w.addClass("toast-close-button").attr("role","button"),l.prepend(w)),r.progressBar&&(f.addClass("toast-progress"),l.prepend(f)),l.hide(),r.newestOnTop?v.prepend(l):v.append(l),l[r.showMethod]({duration:r.showDuration,easing:r.showEasing,complete:r.onShown}),r.timeOut>0&&(u=setTimeout(i,r.timeOut),O.maxHideTime=parseFloat(r.timeOut),O.hideEta=(new Date).getTime()+O.maxHideTime,r.progressBar&&(O.intervalId=setInterval(a,10))),l.hover(s,o),!r.onclick&&r.tapToDismiss&&l.click(i),r.closeButton&&w&&w.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),i(!0)}),r.onclick&&l.click(function(){r.onclick(),i()}),m(b),r.debug&&console&&console.log(b),l}function g(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),C=void 0))}var v,w,C,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:d,error:t,getContainer:n,info:i,options:{},subscribe:o,success:s,version:"2.1.0",warning:a};return b}()})}("function"==typeof define&&define.amd?define:function(e,t){"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):window.toastr=t(window.jQuery)}); 2 | //# sourceMappingURL=/toastr.js.map -------------------------------------------------------------------------------- /static/js/plugins/video/responsible-video.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | var $allVideos = $("iframe[src^='http://player.vimeo.com'], iframe[src^='http://www.youtube.com'], object, embed"), 3 | $fluidEl = $("figure"); 4 | 5 | $allVideos.each(function() { 6 | $(this) 7 | // jQuery .data does not work on object/embed elements 8 | .attr('data-aspectRatio', this.height / this.width) 9 | .removeAttr('height') 10 | .removeAttr('width'); 11 | }); 12 | $(window).resize(function() { 13 | var newWidth = $fluidEl.width(); 14 | $allVideos.each(function() { 15 | var $el = $(this); 16 | $el 17 | .width(newWidth) 18 | .height(newWidth * $el.attr('data-aspectRatio')); 19 | }); 20 | }).resize(); 21 | }); -------------------------------------------------------------------------------- /supervisor.conf: -------------------------------------------------------------------------------- 1 | [program:redis] 2 | command=/opt/redis-4.0.1/src/redis-server 3 | user=root 4 | numprocs=1 5 | directory=/opt/redis-4.0.1/src/ 6 | stdout_logfile=/var/log/redis_access.log 7 | stderr_logfile=/var/log/redis_error.log 8 | autostart=true 9 | autorestart=true 10 | startsecs=10 11 | stopwaitsecs = 120 12 | priority=998 13 | 14 | 15 | 16 | [program:djangoproject.celeryd] 17 | command=/usr/bin/python /root/cmdb/manage.py celery worker -c 4 --loglevel=info 18 | user=root 19 | numprocs=1 20 | directory=/root/cmdb 21 | stdout_logfile=/var/log/celery_worker_access.log 22 | stderr_logfile=/var/log/celery_worker-error.log 23 | autostart=true 24 | autorestart=true 25 | startsecs=10 26 | stopwaitsecs = 120 27 | priority=998 28 | 29 | [program:djangoproject.celerybeat] 30 | command=/usr/bin/python /root/cmdb/manage.py celery beat --schedule=/tmp/celerybeat-schedule --pidfile=/tmp/django_celerybeat.pid --loglevel=INFO 31 | user=root 32 | numprocs=1 33 | directory=/root/cmdb 34 | stdout_logfile=/var/log/celery_beat_access.log 35 | stderr_logfile=/var/log/celery_beat_error.log 36 | autostart=true 37 | autorestart=true 38 | startsecs=10 39 | stopwaitsecs = 120 40 | priority=998 41 | 42 | [program:djangoproject.celerycam] 43 | command=/usr/bin/python /root/cmdb/manage.py celerycam --frequency=10.0 44 | user=root 45 | numprocs=1 46 | directory=/root/cmdb 47 | stdout_logfile=/var/log/celerycam_access.log 48 | stderr_logfile=/var/log/celerycam_error.log 49 | autostart=true 50 | autorestart=true 51 | startsecs=10 52 | stopwaitsecs = 120 53 | priority=998 54 | 55 | 56 | [program:djangoproject.celeryflower] 57 | command=/usr/bin/python /root/cmdb/manage.py celery flower --port=9008 58 | user=root 59 | numprocs=1 60 | directory=/root/cmdb 61 | stdout_logfile=/var/log/celerycam_access.log 62 | stderr_logfile=/var/log/celerycam_error.log 63 | autostart=true 64 | autorestart=true 65 | startsecs=10 66 | stopwaitsecs = 120 67 | priority=998 -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | {% load cache %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 首页 12 | 13 | 14 | {% include 'link_css.html' %} 15 | {% block header-css %} 16 | {% endblock %} 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | {% cache 1 nav %} 25 | {% include 'nav.html' %} 26 | {% endcache%} 27 | 28 | 29 |
30 |
31 | {% include 'navbar-static-top.html' %} 32 |
33 | 34 | 35 |
36 |
37 |

{% block page-content-title %} {% endblock %}

38 | 39 | 40 | 41 | {% block page-nav-tab %} 42 | 43 | {% endblock %} 44 | 45 |
46 |
47 | 48 |
49 |
50 | 51 | 52 | {% block page-content %} 53 | 54 | 55 | {% endblock %} 56 | 57 | {% include 'footer.html' %} 58 |
59 | 60 |
61 | 62 | 63 | 64 | 65 | 66 | {# #} 79 | {% include 'foot_script.html' %} 80 | {% block js %} {% endblock %} -------------------------------------------------------------------------------- /templates/error.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | 4 | {% block header-css %} 5 | {% endblock %} 6 | 7 | 8 | 9 | 10 | {% block page-content %} 11 |
12 | 13 |
14 |

欢迎您,{{ request.session.user }}

15 | 没有权限 16 | 17 |
18 | 19 | 20 |
21 | 22 | {% endblock %} -------------------------------------------------------------------------------- /templates/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /templates/host/history.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header-css %} 4 | {% endblock %} 5 | 6 | 7 | 8 | 9 | {% block page-content-title %}历史命令 {% endblock %} 10 | 11 | {% block page-nav-tab %} 12 | 22 | {% endblock %} 23 | 24 | 25 | 26 | {% block page-content %} 27 |
28 |
29 |
30 |
31 |
32 |
主机
33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 46 | 47 | 48 | 49 |
50 | 51 |
52 |
53 | 54 |
55 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | {% for row in history %} 70 | 71 | 72 | {# #} 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | {% endfor %} 84 | 85 | 86 | 87 | 88 | {# #} 89 | {# #} 90 | {##} 91 | {# #} 92 | {# #} 93 | {# #} 94 | {# #} 95 | {# #} 96 | {# #} 97 | {# #} 98 | {# #} 99 |
主机用户端口命令操作时间操作人
{{ forloop.counter }}{{ row.ip }} {{ row.root }}{{ row.port }}{{ row.cmd }}{{ row.ctime }}{{ row.user }}
主机用户端口命令操作时间操作人
100 | 101 | 102 |
103 | 104 |
105 |
106 |
107 |
108 | 109 |
110 | 111 | 112 | 113 | 114 | 115 | 116 | {% endblock %} -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header-css %} 4 | {% endblock %} 5 | 6 | 7 | 8 | 9 | {% block page-content-title %} 首页 {% endblock %} 10 | 11 | {% block page-nav-tab %} 12 | 19 | {% endblock %} 20 | 21 | 22 | 23 | {% block page-content %} 24 |
25 | 26 |
27 | 28 |
29 |

欢迎您,{{ user }}

30 | 您有 42 条未读消息 和 6 条通知. 31 |
    32 |
  • 33 | 34 | 09:00 pm 35 | 36 | 1 请联系我 37 |
  • 38 |
  • 39 | 40 | 10:16 am 41 | 42 | 2 登记信息 43 |
  • 44 |
  • 45 | 46 | 08:22 pm 47 | 48 | 3 开新店 49 |
  • 50 |
  • 51 | 52 | 11:06 pm 53 | 54 | 4 请回电话 55 |
  • 56 |
  • 57 | 58 | 12:00 am 59 | 60 | 5 发邮件 61 |
  • 62 |
63 |
64 | 65 | 66 |
67 |
68 | {% endblock %} -------------------------------------------------------------------------------- /templates/jigui/show.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "base.html" %} 3 | 4 | {% block header-css %} 5 | {% endblock %} 6 | 7 | 8 | 9 | 10 | {% block page-content-title %} 展示 {% endblock %} 11 | 12 | {% block page-nav-tab %} 13 | 23 | {% endblock %} 24 | 25 | 26 | 27 | {% block page-content %} 28 |
29 |
30 |
31 |
32 | 33 |
34 |
机柜
35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 48 | 49 | 50 | 51 |
52 | 53 |
54 | 55 |
56 |
57 |
58 |
59 | 60 |
61 | 62 |
63 |
64 | 65 | 66 | {% endblock %} 67 | 68 | {% block js %} 69 | 70 | 71 | 72 | 127 | 128 | 129 | 130 | 131 | {% endblock %} 132 | 133 | -------------------------------------------------------------------------------- /templates/jigui/xiangxi.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block header-css %} 4 | {% endblock %} 5 | 6 | 7 | 8 | 9 | {% block page-content-title %} 首页 {% endblock %} 10 | 11 | {% block page-nav-tab %} 12 | 13 | 14 | 25 | {% endblock %} 26 | 27 | 28 | 29 | {% block page-content %} 30 | 31 | 32 | 33 |
34 | 35 | 36 |
37 |
38 |
39 | 43 |
44 |
45 |
46 | 47 | 48 | 49 |

总数: {{ xiangxi_info.jq}}

50 | 51 | 52 |

在用: {{ xiangxi_info.zy}}

53 | 54 | 55 |

自用: {{ xiangxi_info.ziy}}

56 | 57 | 58 |

在售: {{ xiangxi_info.zs}}

59 | 60 | 61 |

整包: {{ xiangxi_info.zb}}

62 | 63 | 64 |

散户: {{ xiangxi_info.sh}}

65 | 66 | 67 |

闲置: {{ xiangxi_info.xz}}

68 | 69 | 70 |

状态: 71 | {% for row in dx %} 72 | {{ row.xuan }} 73 | {% endfor %}

74 | 75 | 76 |

是否在用: {% ifequal xiangxi_info.yong 1 %} 在用 {% else %} 没用 {% endifequal %}

77 | 78 | 79 | 80 | 81 |
82 |
83 |
84 |
85 |

更新时间: {{ xiangxi_info.utime | date:"Y-m-d H:i:s"}}

86 |

创建时间: {{ xiangxi_info.ctime | date:"Y-m-d H:i:s"}}

87 |
88 |
89 |
90 | 91 | 92 |
93 |
94 | 95 |
96 | 97 | 98 | 99 |
100 | 101 | 102 | 103 | 104 | 105 | 108 | 109 | {% endblock %} -------------------------------------------------------------------------------- /templates/link_css.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 登录 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |
24 | 25 | {#

X

#} 26 | 27 |
28 |

欢迎进入

29 |

CMDB 30 | 31 |

32 |

登录进去。在行动中看到它。

33 |
34 | {% csrf_token %} 35 |
36 | 37 |
38 |
39 | 40 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | {{ error_msg }}
48 | 忘记密码?
49 |

没有账户?

50 | 创建账户 51 |
52 |

系统支持组 © 2017

53 |
54 |
55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /templates/nav.html: -------------------------------------------------------------------------------- 1 | 68 | 69 | -------------------------------------------------------------------------------- /templates/navbar-static-top.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | --------------------------------------------------------------------------------