domainname

This commit is contained in:
RobbieHan
2019-04-12 14:06:12 +08:00
parent 9430fa0781
commit fc5a19bdbf
10 changed files with 714 additions and 379 deletions

343
.idea/workspace.xml generated
View File

@@ -5,21 +5,11 @@
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/cmdb/forms.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/cmdb/forms.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/cmdb/models.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/cmdb/models.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/cmdb/urls.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/cmdb/urls.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/cmdb/views.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/cmdb/views.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/cmdb/views_eam.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/cmdb/views_eam.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/system/migrations/0001_initial.py" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/apps/system/migrations/0002_auto_20181115_2124.py" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/apps/system/urls.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/system/urls.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/apps/system/views_user.py" beforeDir="false" afterPath="$PROJECT_DIR$/apps/system/views_user.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/sandboxMP/settings.py" beforeDir="false" afterPath="$PROJECT_DIR$/sandboxMP/settings.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/static/plugins/fastclick/fastclick.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/static/plugins/fastclick/fastclick.min.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/templates/base-static.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/base-static.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/cmdb/cmdb_index.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/cmdb/cmdb_index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/cmdb/network_asset.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/cmdb/network_asset.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/cmdb/networkasset_form.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/cmdb/networkasset_form.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/head-footer.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/head-footer.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/system/users/user.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/system/users/user.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/cmdb/domainname.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/cmdb/domainname.html" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
@@ -27,16 +17,40 @@
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/sandboxMP$views_eam.coverage" NAME="views_eam Coverage Results" MODIFIED="1554950533334" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/apps/cmdb" />
</component>
<component name="DjangoConsoleOptions" custom-start-script="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)">
<option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/apps/cmdb/views.py">
<entry file="file://$PROJECT_DIR$/apps/cmdb/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="253">
<caret line="15" column="24" selection-start-line="15" selection-start-column="24" selection-end-line="15" selection-end-column="24" />
<state relative-caret-position="2567">
<caret line="156" column="4" selection-start-line="156" selection-start-column="4" selection-end-line="156" selection-end-column="9" />
<folding>
<element signature="e#0#29#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/templates/cmdb/cmdb_index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="374">
<caret line="50" column="97" selection-start-line="50" selection-start-column="97" selection-end-line="50" selection-end-column="97" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/apps/cmdb/views_eam.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="7514">
<caret line="460" selection-start-line="460" selection-end-line="460" />
<folding>
<element signature="e#0#9#0" expanded="true" />
</folding>
@@ -45,30 +59,47 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/apps/system/views_structure.py">
<entry file="file://$PROJECT_DIR$/apps/custom.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-359" />
<state relative-caret-position="1649">
<caret line="107" column="26" selection-start-line="107" selection-start-column="26" selection-end-line="107" selection-end-column="26" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/templates/cmdb/cmdb_index.html">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/apps/cmdb/forms.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="509">
<caret line="101" column="16" lean-forward="true" selection-start-line="101" selection-start-column="16" selection-end-line="101" selection-end-column="16" />
<state relative-caret-position="2788">
<caret line="169" column="45" selection-start-line="169" selection-start-column="45" selection-end-line="169" selection-end-column="45" />
<folding>
<element signature="e#192#3193#0#HTML" />
<element signature="e#958#980#0#HTML" expanded="true" />
<element signature="e#1191#1213#0#HTML" expanded="true" />
<element signature="e#2887#2926#0#HTML" expanded="true" />
<element signature="e#3008#3029#0#HTML" expanded="true" />
<element signature="e#3420#3459#0#HTML" expanded="true" />
<element signature="e#3539#3578#0#HTML" expanded="true" />
<element signature="e#73#82#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/apps/cmdb/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1037">
<caret line="64" column="95" selection-start-line="64" selection-start-column="95" selection-end-line="64" selection-end-column="95" />
<folding>
<element signature="e#0#28#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/templates/cmdb/domainname.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4505">
<caret line="265" column="38" lean-forward="true" selection-start-line="265" selection-start-column="38" selection-end-line="265" selection-end-column="38" />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
@@ -88,6 +119,7 @@
<find>访问来源</find>
<find>Latest Orders</find>
<find>Browser Usage</find>
<find>get_context_data</find>
</findStrings>
</component>
<component name="Git.Settings">
@@ -98,10 +130,8 @@
<list>
<option value="$PROJECT_DIR$/templates/cmdb/natrule.html" />
<option value="$PROJECT_DIR$/templates/cmdb/natrule_form.html" />
<option value="$PROJECT_DIR$/apps/cmdb/models.py" />
<option value="$PROJECT_DIR$/templates/cmdb/networkasset_form.html" />
<option value="$PROJECT_DIR$/static/dist/css/AdminLTE.css" />
<option value="$PROJECT_DIR$/apps/cmdb/views_eam.py" />
<option value="$PROJECT_DIR$/templates/cmdb/network_asset.html" />
<option value="$PROJECT_DIR$/templates/system/users/user.html" />
<option value="$PROJECT_DIR$/sandboxMP/settings.py" />
@@ -112,10 +142,15 @@
<option value="$PROJECT_DIR$/templates/base-static.html" />
<option value="$PROJECT_DIR$/static/plugins/echarts/echarts.min.js" />
<option value="$PROJECT_DIR$/static/plugins/highcharts/highcharts.js" />
<option value="$PROJECT_DIR$/apps/cmdb/urls.py" />
<option value="$PROJECT_DIR$/templates/index2.html" />
<option value="$PROJECT_DIR$/apps/cmdb/forms.py" />
<option value="$PROJECT_DIR$/apps/cmdb/views.py" />
<option value="$PROJECT_DIR$/apps/cmdb/forms.py" />
<option value="$PROJECT_DIR$/apps/cmdb/models.py" />
<option value="$PROJECT_DIR$/apps/cmdb/views_eam.py" />
<option value="$PROJECT_DIR$/apps/cmdb/urls.py" />
<option value="$PROJECT_DIR$/templates/cmdb/domainname_form.html" />
<option value="$PROJECT_DIR$/templates/cmdb/domainname.html" />
<option value="$PROJECT_DIR$/templates/cmdb/domainname2natrule.html" />
<option value="$PROJECT_DIR$/templates/cmdb/cmdb_index.html" />
</list>
</option>
@@ -130,6 +165,7 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
@@ -142,11 +178,32 @@
<item name="sandboxMP" type="462c0819:PsiDirectoryNode" />
<item name="apps" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="sandboxMP" type="b2602c69:ProjectViewProjectNode" />
<item name="sandboxMP" type="462c0819:PsiDirectoryNode" />
<item name="apps" type="462c0819:PsiDirectoryNode" />
<item name="cmdb" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="sandboxMP" type="b2602c69:ProjectViewProjectNode" />
<item name="sandboxMP" type="462c0819:PsiDirectoryNode" />
<item name="config" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="sandboxMP" type="b2602c69:ProjectViewProjectNode" />
<item name="sandboxMP" type="462c0819:PsiDirectoryNode" />
<item name="templates" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="sandboxMP" type="b2602c69:ProjectViewProjectNode" />
<item name="sandboxMP" type="462c0819:PsiDirectoryNode" />
<item name="templates" type="462c0819:PsiDirectoryNode" />
<item name="cmdb" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
@@ -160,10 +217,10 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/templates/cmdb" />
<recent name="$PROJECT_DIR$/static/plugins/echarts" />
<recent name="$PROJECT_DIR$/templates" />
<recent name="$PROJECT_DIR$/templates/system/users" />
<recent name="$PROJECT_DIR$/templates/cmdb" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/static/plugins/echarts" />
@@ -182,7 +239,29 @@
</list>
</option>
</component>
<component name="RunManager">
<component name="RunManager" selected="Django server.cmdb">
<configuration name="views_eam" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="sandboxMP" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/apps/cmdb" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/apps/cmdb/views_eam.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="cmdb" type="Python.DjangoServer" factoryName="Django server">
<module name="sandboxMP" />
<option name="INTERPRETER_OPTIONS" value="" />
@@ -207,6 +286,11 @@
<option name="customRunCommand" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.views_eam" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
@@ -224,22 +308,30 @@
<workItem from="1554305728868" duration="446000" />
<workItem from="1554533797978" duration="10677000" />
<workItem from="1554604330772" duration="12685000" />
<workItem from="1554711227466" duration="4577000" />
<workItem from="1554786790020" duration="3729000" />
<workItem from="1554871617441" duration="1241000" />
<workItem from="1554897056464" duration="7503000" />
<workItem from="1554949204301" duration="20322000" />
<workItem from="1554999607936" duration="4491000" />
<workItem from="1555037177006" duration="1560000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="52247000" />
<option name="totallyTimeSpent" value="95670000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="23" width="1680" height="973" extended-state="0" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.1965812" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.18192919" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" weight="0.21793416" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.25198638" />
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.2644722" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.24063565" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
@@ -262,13 +354,6 @@
<option name="version" value="1" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/templates/cmdb/deviceinfo_form.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="396">
<caret line="89" selection-start-line="89" selection-end-line="98" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/natrule.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="295">
@@ -307,23 +392,9 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/custom.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="211">
<caret line="83" selection-start-line="83" selection-end-line="83" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/system/users/passwd_change.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/apps/utils/sandbox_utils.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="476">
<caret line="53" column="29" selection-start-line="53" selection-start-column="12" selection-end-line="53" selection-end-column="29" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/sandboxMP/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="445">
@@ -381,28 +452,12 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/index2.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="163">
<caret line="1236" column="48" selection-start-line="1212" selection-start-column="9" selection-end-line="1258" selection-end-column="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/index2.html" />
<entry file="file://$PROJECT_DIR$/apps/system/forms.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1082" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="151">
<caret line="137" column="4" lean-forward="true" selection-start-line="137" selection-start-column="4" selection-end-line="137" selection-end-column="15" />
<folding>
<element signature="e#0#29#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/static/bootstrap/css/bootstrap.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="216">
@@ -417,80 +472,134 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/network_asset.html">
<entry file="file://$PROJECT_DIR$/templates/cmdb/deviceinfo_detail.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="226">
<caret line="52" column="44" lean-forward="true" selection-start-line="52" selection-start-column="44" selection-end-line="52" selection-end-column="44" />
</state>
<state relative-caret-position="-2183" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/views_eam.py">
<entry file="file://$PROJECT_DIR$/apps/system/views_structure.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="329" column="20" selection-start-line="329" selection-start-column="20" selection-end-line="329" selection-end-column="20" />
<state relative-caret-position="-382">
<caret line="17" selection-start-line="17" selection-end-line="17" />
<folding>
<element signature="e#0#9#0" expanded="true" />
<element signature="e#83#94#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="34">
<caret line="2" selection-start-line="2" selection-end-line="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/views.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="253">
<caret line="15" column="24" selection-start-line="15" selection-start-column="24" selection-end-line="15" selection-end-column="24" />
<state relative-caret-position="736">
<caret line="49" column="38" selection-start-line="49" selection-start-column="38" selection-end-line="49" selection-end-column="38" />
<folding>
<element signature="e#0#9#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/deviceinfo_form.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="87">
<caret line="77" selection-start-line="77" selection-end-line="88" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/utils/sandbox_utils.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="42">
<caret line="77" lean-forward="true" selection-start-line="77" selection-end-line="77" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/deviceinfo.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3134">
<caret line="354" selection-start-line="354" selection-end-line="356" selection-end-column="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/index.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/network_asset.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="634">
<caret line="161" column="51" selection-start-line="161" selection-start-column="51" selection-end-line="161" selection-end-column="51" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/domainname2natrule.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="425">
<caret line="25" column="17" selection-start-line="4" selection-start-column="4" selection-end-line="29" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/models.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2567">
<caret line="156" column="4" selection-start-line="156" selection-start-column="4" selection-end-line="156" selection-end-column="9" />
<folding>
<element signature="e#0#29#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/views_eam.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="7514">
<caret line="460" selection-start-line="460" selection-end-line="460" />
<folding>
<element signature="e#0#9#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/custom.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1649">
<caret line="107" column="26" selection-start-line="107" selection-start-column="26" selection-end-line="107" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/cmdb/forms.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="508">
<caret line="143" column="49" selection-start-line="143" selection-start-column="49" selection-end-line="143" selection-end-column="49" />
<state relative-caret-position="2788">
<caret line="169" column="45" selection-start-line="169" selection-start-column="45" selection-end-line="169" selection-end-column="45" />
<folding>
<element signature="e#73#82#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/apps/system/views_structure.py">
<entry file="file://$PROJECT_DIR$/apps/cmdb/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-359" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/deviceinfo.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="459">
<caret line="354" selection-start-line="354" selection-end-line="356" selection-end-column="5" />
<state relative-caret-position="1037">
<caret line="64" column="95" selection-start-line="64" selection-start-column="95" selection-end-line="64" selection-end-column="95" />
<folding>
<element signature="e#0#28#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/deviceinfo_detail.html">
<entry file="file://$PROJECT_DIR$/templates/cmdb/domainname_form.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-2183" />
<state relative-caret-position="293">
<caret line="35" column="22" selection-start-line="35" selection-start-column="22" selection-end-line="35" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/domainname.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4505">
<caret line="265" column="38" lean-forward="true" selection-start-line="265" selection-start-column="38" selection-end-line="265" selection-end-column="38" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/templates/cmdb/cmdb_index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="509">
<caret line="101" column="16" lean-forward="true" selection-start-line="101" selection-start-column="16" selection-end-line="101" selection-end-column="16" />
<folding>
<element signature="e#192#3193#0#HTML" />
<element signature="e#958#980#0#HTML" expanded="true" />
<element signature="e#1191#1213#0#HTML" expanded="true" />
<element signature="e#2887#2926#0#HTML" expanded="true" />
<element signature="e#3008#3029#0#HTML" expanded="true" />
<element signature="e#3420#3459#0#HTML" expanded="true" />
<element signature="e#3539#3578#0#HTML" expanded="true" />
</folding>
<state relative-caret-position="374">
<caret line="50" column="97" selection-start-line="50" selection-start-column="97" selection-end-line="50" selection-end-column="97" />
</state>
</provider>
</entry>

View File

@@ -6,7 +6,8 @@ import re
from django import forms
from .models import Code, DeviceInfo, ConnectionInfo, DeviceFile, NetworkAsset, NatRule
from .models import (Code, DeviceInfo, ConnectionInfo, DeviceFile,
NetworkAsset, NatRule, DomainName)
class CodeCreateForm(forms.ModelForm):
@@ -118,8 +119,6 @@ class NetworkAssetForm(forms.ModelForm):
memory = cleaned_data.get('memory')
disk = cleaned_data.get('disk')
show_on_top = cleaned_data.get('show_on_top')
# if NetworkAsset.objects.filter(ip_address=ip_address).count():
# raise forms.ValidationError('资产地址已存在:{}已存在'.format(ip_address))
if memory:
me = re.match('(.*)/(.*)', memory)
if me:
@@ -155,6 +154,18 @@ class NatRuleForm(forms.ModelForm):
'internet_ip': {'required': '请填写公网IP'},
'src_port': {'required': '请填写公网端口'},
'lan_ip': {'required': '请填写内网地址'},
'dest_port': {'required': '请填写内网端口'}
'dest_port': {'required': '请填写内网端口'},
'desc': {'required': '请填写规则说明'}
}
class DomainNameForm(forms.ModelForm):
class Meta:
model = DomainName
fields = '__all__'
error_messages = {
'domain': {'required': '域名不能为空'},
'buyDate': {'required': '请填写域名购买日期'},
'warrantyDate': {'required': '请填写域名到期时间'},
'dn_type': {'required': '域名类型不能为空'}
}

View File

@@ -167,14 +167,15 @@ class DomainName(AbstractMode):
dn_type_choices = (('1', '主域名'),('2', '二级域名'))
domain = models.CharField(max_length=200, verbose_name='域名')
dn_type = models.CharField(max_length=20, choices=dn_type_choices, default='1')
nat_rule = models.ManyToManyField('NatRule', blank=True)
resolution_server = models.ForeignKey('Supplier', related_name='res_server',
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='解析服务')
domain_provider = models.ForeignKey('Supplier', related_name='do_provider',
blank=True, null=True, on_delete=models.SET_NULL, verbose_name='域名服务')
operation_type = models.ForeignKey('Code', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='所属项目')
state = models.BooleanField(default=True, verbose_name='状态')
ssl_cert = models.FileField(upload_to="ssl_cert/%Y/%m", null=True, blank=True, verbose_name="SSL证书")
buyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='购买日期')
warrantyDate = models.DateField(default=datetime.now, blank=True, null=True, verbose_name='到保日期')
buyDate = models.DateField(default=datetime.now, verbose_name='购买日期')
warrantyDate = models.DateField(default=datetime.now, verbose_name='到期时间')
desc = models.TextField(blank=True, default='', verbose_name='备注信息')
class Meta:
@@ -182,5 +183,13 @@ class DomainName(AbstractMode):
verbose_name_plural = verbose_name
class SSLCert(TimeAbstract):
domain_name = models.ForeignKey('DomainName', blank=True, null=True, on_delete=models.SET_NULL, verbose_name='域名')
ssl_cert = models.FileField(upload_to="ssl_cert/", verbose_name="域名证书")
buyDate = models.DateField(default=datetime.now, verbose_name='购买日期')
warrantyDate = models.DateField(default=datetime.now, verbose_name='到期时间')
upload_user = models.CharField(max_length=20, verbose_name="上传人")
desc = models.TextField(blank=True, default='', verbose_name='备注信息')

View File

@@ -56,4 +56,11 @@ urlpatterns = [
path('eam/natrule/update/', views_eam.NatRuleUpdateView.as_view(), name='eam-natrule-update'),
path('eam/natrule/list/', views_eam.NatRuleListView.as_view(), name='eam-natrule-list'),
path('eam/natrule/delete/', views_eam.NatRuleDeleteView.as_view(), name='eam-natrule-delete'),
path('eam/domain/', views_eam.DomainNameView.as_view(), name='eam-domain'),
path('eam/domain/create/', views_eam.DomainNameCreateView.as_view(), name='eam-domain-create'),
path('eam/domain/update/', views_eam.DomainNameUpdateView.as_view(), name='eam-domain-update'),
path('eam/domain/list/', views_eam.DomainNameListView.as_view(), name='eam-domain-list'),
path('eam/domain/delete/', views_eam.DomainNameDeleteView.as_view(), name='eam-domain-delete'),
path('eam/domain/dn2nr/', views_eam.DomainName2NatRule.as_view(), name='eam-domain-dn2nr'),
]

View File

@@ -12,7 +12,7 @@ class CmdbView(LoginRequiredMixin, View):
ret = dict()
cabinet_all = Cabinet.objects.all()
operation_type_all = Code.objects.filter(parent__key='operation_type')
net_asset=list(NetworkAsset.objects.filter(show_on_top=True).values())
# net_asset=list(NetworkAsset.objects.filter(show_on_top=True).values())
cabinet_list = []
cabinet_count = []
for cabinet in cabinet_all:
@@ -29,23 +29,23 @@ class CmdbView(LoginRequiredMixin, View):
}
operations.append(data)
for asset in net_asset:
disk = asset['disk']
memory = asset['memory']
if disk:
di = re.match('(.*)/(.*)', disk)
di_used = int(di.group(1))
di_total = int(di.group(2))
di_percent = '{:.0%}'.format(di_used / di_total)
asset['disk'] = {'disk': disk, 'percent': di_percent}
if memory:
me = re.match('(.*)/(.*)', memory)
me_used = int(me.group(1))
me_total = int(me.group(2))
me_percent = '{:.0%}'.format(me_used / me_total)
asset['memory'] = {'memory': memory, 'percent': me_percent}
# for asset in net_asset:
# disk = asset['disk']
# memory = asset['memory']
# if disk:
# di = re.match('(.*)/(.*)', disk)
# di_used = int(di.group(1))
# di_total = int(di.group(2))
# di_percent = '{:.0%}'.format(di_used / di_total)
# asset['disk'] = {'disk': disk, 'percent': di_percent}
# if memory:
# me = re.match('(.*)/(.*)', memory)
# me_used = int(me.group(1))
# me_total = int(me.group(2))
# me_percent = '{:.0%}'.format(me_used / me_total)
# asset['memory'] = {'memory': memory, 'percent': me_percent}
ret['cabinet_list'] = cabinet_list
ret['cabinet_count'] = cabinet_count
ret['operations'] = operations
ret['net_asset'] = net_asset
# ret['net_asset'] = net_asset
return render(request, 'cmdb/cmdb_index.html', ret)

View File

@@ -1,4 +1,5 @@
import re
from datetime import datetime, timedelta
from django.views.generic import TemplateView, View
from django.contrib.auth import get_user_model
@@ -13,8 +14,7 @@ from custom import (BreadcrumbMixin, SandboxDeleteView,
from .models import (Cabinet, DeviceInfo, Code, ConnectionInfo, DeviceFile,
Supplier, NetworkAsset, NatRule, DomainName)
from .forms import (DeviceCreateForm, DeviceUpdateForm, ConnectionInfoForm,
DeviceFileUploadForm, NetworkAssetForm,
NatRuleForm)
DeviceFileUploadForm, NetworkAssetForm,NatRuleForm, DomainNameForm)
from utils.db_utils import MongodbDriver
from utils.sandbox_utils import LoginExecution
@@ -388,44 +388,73 @@ class NatRuleListView(SandboxListView):
class NatRuleDeleteView(SandboxDeleteView):
model = NatRule
# class DomainNameView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
# template_name = 'cmdb/domainname.html'
#
#
# class DomainNameCreateView(SandboxCreateView):
# model = DomainName
# form_class = NetworkAssetCreateForm
#
# def get_context_data(self, **kwargs):
# kwargs['all_supplier'] = Supplier.objects.all()
# return super().get_context_data(**kwargs)
#
#
# class DomainNameUpdateView(SandboxUpdateView):
# model = NetworkAsset
# form_class = NetworkAssetUpdateForm
#
# def get_context_data(self, **kwargs):
# kwargs['all_provider'] = Supplier.objects.all()
# return super().get_context_data(**kwargs)
#
#
# class DomainNameListView(SandboxListView):
# model = NetworkAsset
# fields = ['id', 'domain', 'resolution_server', 'domain_provider', 'state', 'buyDate', 'warrantyDate', 'desc']
#
# def get_filters(self):
# data = self.request.GET
# filters = {'dn_type': '1'}
# if 'domain' in data and data['domain']:
# filters['domain__icontains'] = data['domain']
# if 'resolution_server' in data and data['resolution_server']:
# filters['resolution_server'] = data['resolution_server']
# if 'domain_provider' in data and data['domain_provider']:
# filters['domain_provider'] = data['domain_provider']
#
# return filters
#
#
# class DomainNameDeleteView(SandboxDeleteView):
# model = DomainName
class DomainNameView(LoginRequiredMixin, BreadcrumbMixin, TemplateView):
template_name = 'cmdb/domainname.html'
def get_context_data(self, **kwargs):
kwargs['all_operation'] = Code.objects.filter(parent__key='OPERATION_TYPE')
return super().get_context_data(**kwargs)
class DomainNameCreateView(SandboxCreateView):
model = DomainName
form_class = DomainNameForm
def get_context_data(self, **kwargs):
kwargs['all_supplier'] = Supplier.objects.all()
kwargs['all_nat'] = NatRule.objects.all()
kwargs['all_operation'] = Code.objects.filter(parent__key='OPERATION_TYPE')
return super().get_context_data(**kwargs)
class DomainNameUpdateView(SandboxUpdateView):
model = DomainName
form_class = DomainNameForm
def get_context_data(self, **kwargs):
kwargs['all_supplier'] = Supplier.objects.all()
kwargs['all_nat'] = NatRule.objects.all()
kwargs['all_operation'] = Code.objects.filter(parent__key='OPERATION_TYPE')
return super().get_context_data(**kwargs)
class DomainNameListView(SandboxListView):
model = DomainName
fields = ['id', 'domain', 'dn_type', 'resolution_server__firm',
'domain_provider__firm', 'operation_type__value',
'state', 'warrantyDate', 'desc']
def get_filters(self):
data = self.request.GET
filters = {}
if 'select' in data and data['select']:
select = int(data['select'])
if select == 0:
date_time = datetime.today()
filters['warrantyDate__lte'] = date_time
if select == 1:
now = datetime.today()
date_time = now + timedelta(days=30)
filters['warrantyDate__range'] = (now, date_time)
if 'dn_type' in data and data['dn_type']:
filters['dn_type'] = data['dn_type']
if 'domain' in data and data['domain']:
filters['domain__icontains'] = data['domain']
if 'operation_type' in data and data['operation_type']:
filters['operation_type'] = data['operation_type']
return filters
class DomainNameDeleteView(SandboxDeleteView):
model = DomainName
class DomainName2NatRule(LoginRequiredMixin, View):
def get(self, request):
ret = dict()
if 'id' in request.GET and request.GET['id']:
domain_name = get_object_or_404(DomainName, pk=int(request.GET['id']))
ret['all_nat'] = domain_name.nat_rule.all()
return render(request, 'cmdb/domainname2natrule.html', ret)

View File

@@ -6,6 +6,69 @@
<!-- Main content -->
<section class="content">
<!-- Small boxes (Stat box) -->
<div class="row">
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-aqua">
<div class="inner">
<strong><h4>WebSocket</h4></strong>
<p>WSS在线测试工具</p>
</div>
<div class="icon">
<i class="fa fa-unlink "></i>
</div>
<a href="http://tool.hibbba.com/websocket/" class="small-box-footer" target="_blank">使用工具 <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<strong><h4>网速通</h4></strong>
<p>域名访问测速</p>
</div>
<div class="icon">
<i class="fa fa-globe"></i>
</div>
<a href="http://ceba.quansucloud.com/wstCeba/http/http-test.action" target="_blank" class="small-box-footer">使用工具 <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<strong><h4>IPIP</h4></strong>
<p>IP查询工具</p>
</div>
<div class="icon">
<i class="fa fa-delicious"></i>
</div>
<a href="https://www.ipip.net/ip.html" target="_blank" class="small-box-footer">使用工具<i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-orange">
<div class="inner">
<strong><h4>暂未添加</h4></strong>
<p>其他工具</p>
</div>
<div class="icon">
<i class="fa fa-delicious"></i>
</div>
<a href="#" class="small-box-footer">More info <i class="fa fa-arrow-circle-right"></i></a>
</div>
</div>
<!-- ./col -->
</div>
<!-- /.row -->
<div class="row">
<div class="col-md-12">
<div class="box">
@@ -42,120 +105,6 @@
</div>
<!-- /.col -->
</div>
<div class="row">
<div class="col-md-7">
<div class="box box-info">
<div class="box-header with-border">
<h3 class="box-title">快速访问接口</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<!-- /.box-header -->
<div class="box-body no-padding">
<table class="table" cellspacing="0">
<thead>
<tr>
<th> 资产名称</th>
<th>访问地址</th>
<th>硬盘资源(T)</th>
<th>内存资源(G)</th>
</tr>
</thead>
<tbody>
{% for asset in net_asset %}
<tr>
<td><a href="{{ asset.management }}" target="_blank"> {{ asset.name }}</a></td>
<td><a href="{{ asset.management }}" target="_blank">{{ asset.management }}</a></td>
<td>
<div class="progress-group">
<div class="progress sm" style="background: #00a65a;color:#FFF;">
<div class="progress-bar progress-bar-yellow" style="width: {{ asset.disk.percent }}">
</div>
</div>
<span class="progress-number">{{ asset.disk.disk }}</span>
</div>
</td>
<td>
<div class="progress-group">
<div class="progress sm" style="background: #00a65a;color:#FFF;">
<div class="progress-bar progress-bar-yellow" style="width: {{ asset.memory.percent }}">
</div>
</div>
<span class="progress-number">{{ asset.memory.memory }}</span>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<!-- /.table-responsive -->
</div>
<!-- /.box-body -->
<div class="box-footer clearfix">
<button class="btn btn-sm btn-default pull-right" onclick="doNetworkAsset()">所有网络资产</button>
</div>
<!-- /.box-footer -->
</div>
</div>
<div class="col-md-5">
<div class="box box-danger">
<div class="box-header with-border">
<h3 class="box-title">提示消息</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<!-- /.box-header -->
<div class="box-body">
<div class="table-responsive">
<table class="table no-margin">
<thead>
<tr>
<th>消息类型</th>
<th>消息内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>系统消息</td>
<td>消息功能暂未开放</td>
</tr>
<tr>
<td>系统消息</td>
<td>消息功能暂未开放</td>
</tr>
<tr>
<td>系统消息</td>
<td>消息功能暂未开放</td>
</tr>
<tr>
<td>系统消息</td>
<td>消息功能暂未开放</td>
</tr>
<tr>
<td>系统消息</td>
<td>消息功能暂未开放</td>
</tr>
</tbody>
</table>
</div>
<!-- /.table-responsive -->
</div>
<!-- /.box-body -->
<div class="box-footer clearfix">
<a href="javascript:void(0)" class="btn btn-sm btn-default btn-flat pull-right">所有消息</a>
</div>
<!-- /.box-footer -->
</div>
</div>
</div>
</section>
<!-- /.content -->

View File

@@ -36,40 +36,14 @@
<div class="box-header">
<form class="form-inline" id="queryForm">
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>主机</label>
<input type="text" name="sys_hostname" class="form-control inputText" id="sys_hostname">
</div>
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>设备地址</label>
<input type="text" name="hostname" class="form-control inputText" id="hostname">
</div>
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>网络类型</label>
<select class="form-control inputText select2" name="network_type" id="network_type">
<option></option>
{% for code in all_code %}
{% ifequal code.parent.key 'NETWORK_TYPE' %}
<option value="{{ code.id }}">{{ code.value }}</option>
{% endifequal %}
{% endfor %}
</select>
</div>
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>服务类型</label>
<select class="form-control inputText select2" name="service_type" , id="service_type">
<option></option>
{% for code in all_code %}
{% if code.parent.key == 'SERVICE_TYPE' %}
<option value="{{ code.id }}">{{ code.value }}</option>
{% endif %}
{% endfor %}
</select>
<label></label>
<input type="text" name="domain" class="form-control inputText" id="domain">
</div>
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>所属项目</label>
<select class="form-control inputText select2" name="operation_type" , id="operation_type">
<option></option>
{% for code in all_code %}
{% for code in all_operation %}
{% if code.parent.key == 'OPERATION_TYPE' %}
<option value="{{ code.id }}">{{ code.value }}</option>
{% endif %}
@@ -77,16 +51,21 @@
</select>
</div>
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>机柜信息</label>
<select class="form-control inputText select2" name="dev_cabinet" , id="dev_cabinet">
<label>域名类型</label>
<select class="form-control inputText select2" name="dn_type" , id="dn_type">
<option></option>
{% for cabinet in all_cabinet %}
<option value="{{ cabinet.id }}">{{ cabinet.number }}</option>
{% endfor %}
<option value="1">一级域名</option>
<option value="2">二级域名</option>
</select>
</div>
<div class="form-group searchArea margin-r-5 margin-top-5">
<label>有效期</label>
<select id="select" name="select" class="form-control inputText select2">
<option style="text-align:center" value="">-----所有-----</option>
<option value="0">已过期</option>
<option value="1">三月内即将到期</option>
</select>
</div>
<button type="button" id="btnSearch" class="btn btn-default">
<i class="glyphicon glyphicon-search"></i>查询
</button>
@@ -99,13 +78,14 @@
<tr valign="middle">
<th><input type="checkbox" id="checkAll"></th>
<th>ID</th>
<th>主机</th>
<th>IP地址</th>
<th>服务类型</th>
<th></th>
<th>域名类型</th>
<th>域名解析商</th>
<th>域名服务商</th>
<th>所属项目</th>
<th>配置信息</th>
<th>机柜信息</th>
<th>网络类型</th>
<th>状态</th>
<th>到期时间</th>
<th>备注信息</th>
<th>操作</th>
</tr>
</thead>
@@ -135,7 +115,7 @@
// 菜单选中高亮
$(function () {
$('#CMDB-EAM').addClass('active');
$('#CMDB-EAM-DEVICE').addClass('active');
$('#CMDB-EAM-DOMAIN').addClass('active');
});
@@ -150,53 +130,72 @@
{
ajax: {
"url": "{% url 'cmdb:eam-device-list' %}",
"url": "{% url 'cmdb:eam-domain-list' %}",
"data": function (d) {
d.sys_hostname = $("#sys_hostname").val();
d.hostname = $("#hostname").val();
d.network_type = $("#network_type").val();
d.service_type = $("#service_type").val();
d.domain = $("#domain").val();
d.select = $("#select").val();
d.dn_type = $("#dn_type").val();
d.operation_type = $("#operation_type").val();
d.dev_cabinet = $("#dev_cabinet").val();
}
},
columns: [
DATATABLES_CONSTANT.DATA_TABLES.COLUMN.CHECKBOX,
{
data: "id",
},
{
data: "sys_hostname",
data: "domain",
},
{
data: "hostname",
data: "dn_type",
render : function(data, type, row, meta) {
if (data=="1") {
return "一级域名";
}if (data=="2") {
return "二级域名";
}
}
},
{
data: "service_type",
data: "resolution_server__firm",
},
{
data: "operation_type",
data: "domain_provider__firm",
},
{
data: "operation_type__value",
},
{
data: "config",
data: "state",
render : function(data, type, row, meta) {
if (data==1) {
var ret="<button class='btn btn-success btn-xs'>在用</button>";
return ret;
}if (data==0) {
var ret="<button class='btn btn-warning btn-xs'>停用</button>";
return ret;
}
}
},
{
data: "dev_cabinet",
data: "warrantyDate",
},
{
data: "network_type",
data: "desc",
},
{
data: "id",
bSortable: "false",
render: function (data, type, row, meta) {
var ret = "<button title='详情' onclick='doDetail("
+ data + ")'><i class='glyphicon glyphicon-list-alt'></i></button>";
ret = ret + "<button title='修改' onclick='doUpdate("
var ret = "<button title='修改' onclick='doUpdate("
+ data + ")'><i class='glyphicon glyphicon-pencil'></i></button>";
ret = ret + "<button title='认证管理' onclick='doDevice2Connection("
+ data + ")'><i class='glyphicon glyphicon-user'></i></button>";
ret = ret + "<button title='解析地址' onclick='dodn2nr("
+ data + ")'><i class='glyphicon glyphicon-globe'></i></button>";
ret = ret + "<button title='删除' onclick='doDelete("
+ data + ")'><i class='glyphicon glyphicon-trash'></i></button>";
return ret;
@@ -214,35 +213,33 @@
});
//新建数据
$("#btnCreate").click(function () {
var div=layer.open({
layer.open({
type: 2,
title: '新增',
shadeClose: false,
maxmin: true,
area: ['800px', '400px'],
content: "{% url 'cmdb:eam-device-create' %}",
area: ['800px', '620px'],
content: "{% url 'cmdb:eam-domain-create' %}",
end: function () {
//关闭时做的事情
oDataTable.ajax.reload();
}
});
layer.full(div )
});
//修改数据
function doUpdate(id) {
var div=layer.open({
layer.open({
type: 2,
title: '编辑',
shadeClose: false,
maxmin: true,
area: ['800px', '400px'],
content: ["{% url 'cmdb:eam-device-update' %}" + '?id=' + id, 'no'],
area: ['800px', '620px'],
content: ["{% url 'cmdb:eam-domain-update' %}" + '?id=' + id],
end: function () {
oDataTable.ajax.reload();
}
});
layer.full(div )
}
//checkbox全选
@@ -280,7 +277,7 @@
layer.close(index);
$.ajax({
type: "POST",
url: "{% url 'cmdb:eam-device-delete' %}",
url: "{% url 'cmdb:eam-domain-delete' %}",
data: {"id": sId, csrfmiddlewaretoken: '{{ csrf_token }}'},
cache: false,
success: function (msg) {
@@ -309,7 +306,7 @@
layer.close(index);
$.ajax({
type: "POST",
url: "{% url 'cmdb:eam-device-delete' %}",
url: "{% url 'cmdb:eam-domain-delete' %}",
data: {"id": id, csrfmiddlewaretoken: '{{ csrf_token }}'},
cache: false,
success: function (msg) {
@@ -338,22 +335,17 @@
});
function doDevice2Connection(id) {
function dodn2nr(id) {
layer.open({
type: 2,
title: '认证管理',
title: '解析地址',
shadeClose: false,
skin: 'layui-layer-lan',
maxmin: true,
area: ['800px', '400px'],
content: ["{% url 'cmdb:eam-device-device2connection' %}" + '?id=' + id, 'no'],
end: function () {
oDataTable.ajax.reload();
}
content: ["{% url 'cmdb:eam-domain-dn2nr' %}" + '?id=' + id],
});
}
function doDetail(id){
window.location.href="{% url 'cmdb:eam-device-detail' %}?id="+id;
}
</script>
{% endblock %}

View File

@@ -0,0 +1,32 @@
{% extends 'base-layer.html' %}
{% load staticfiles %}
{% block main %}
<div class="box">
<div class="box-body">
<table class="table table-bordered">
<tr>
<th style="width: 10px"></th>
<th>公网IP</th>
<th>源端口</th>
<th>内网iP</th>
<th>目的端口</th>
<th>状态</th>
<th>规则说明</th>
</tr>
{% for nat in all_nat %}
<tr>
<td></td>
<td>{{ nat.internet_ip }}</td>
<td>{{ nat.src_port }}</td>
<td>{{ nat.lan_ip }}</td>
<td>{{ nat.dest_port }}</td>
<td>{{ nat.state }}</td>
<td>{{ nat.desc }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,197 @@
{% extends 'base-layer.html' %}
{% load staticfiles %}
{% block css %}
<link rel="stylesheet" href="{%static 'plugins/select2/select2.min.css' %}">
<link rel="stylesheet" href="{% static 'js/plugins/layer/skin/layer.css' %}">
<link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap-datetimepicker.min.css' %}">
{% endblock %}
{% block main %}
<div class="box box-danger">
<form class="form-horizontal" id="addForm" method="post">
<input type="hidden" name='id' value="{{ domainname.id }}" />
{% csrf_token %}
<div class="box-body">
<fieldset>
<legend>
</legend>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">域名地址</label>
<div class="col-sm-8">
<input class="form-control" name="domain" type="text" value="{{ domainname.domain }}" />
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">NAT规则</label>
<div class="col-sm-8">
<select class="form-control select2" multiple="multiple" name="nat_rule" data-placeholder="关联NAT(可多选)"
style="width: 100%;">
{% for nat in all_nat %}
<option value="{{ nat.id }}" {% if nat in domainname.nat_rule.all %}selected="selected"
{% endif %}>{{ nat.internet_ip }}
{% if nat.internet_ip %}:{{ nat.src_port }}{% endif %}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">域名解析</label>
<div class="col-sm-8">
<select class="form-control select2" style="width:100%;" name="resolution_server">
<option {% ifequal domainname.resolution_server '' %}selected="selected"{% endifequal %}></option>
{% for supplier in all_supplier %}
<option value="{{ supplier.id }}" {% ifequal domainname.resolution_server.id supplier.id %}selected="selected"{% endifequal %}>
{{ supplier.firm }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">域名服务</label>
<div class="col-sm-8">
<select class="form-control select2" style="width:100%;" name="domain_provider">
<option {% ifequal domainname.domain_provider '' %}selected="selected"{% endifequal %}></option>
{% for supplier in all_supplier %}
<option value="{{ supplier.id }}" {% ifequal domainname.domain_provider.id supplier.id %}selected="selected"{% endifequal %}>
{{ supplier.firm }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">购买日期</label>
<div class="col-sm-3">
<input type="text" class="form-control pull-right form_datetime" name="buyDate"
value="{{ domainname.buyDate | date:'Y-m-d' }}" readonly/>
</div>
<label class="col-sm-2 control-label">质保日期</label>
<div class="col-sm-3">
<input type="text" class="form-control pull-right form_datetime" name="warrantyDate"
value="{{ domainname.warrantyDate | date:'Y-m-d' }}" readonly/>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">所属项目</label>
<div class="col-sm-3">
<select class="form-control select2" style="width:100%;" name="operation_type">
<option {% ifequal deviceinfo.operation_type '' %}selected="selected"{% endifequal %}></option>
{% for code in all_operation %}
<option value="{{ code.id }}" {% ifequal domainname.operation_type.id code.id %}selected="selected"{% endifequal %}>
{{ code.value }}</option>
{% endfor %}
</select>
</div>
<label class="col-sm-2 control-label">域名类型</label>
<div class="col-sm-3">
<select class="form-control select2" style="width:100%;" name="dn_type">
<option {% ifequal domanname.dn_type '' %}selected="selected"{% endifequal %}></option>
<option value="1" {% ifequal domainname.dn_type "1" %}selected="selected"{% endifequal %}>一级域名</option>
<option value="2" {% ifequal domainname.dn_type "2" %}selected="selected"{% endifequal %}>二级域名</option>
</select>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">状态</label>
<div class="col-sm-3">
<label class="control-label">
<input type="radio" class="minimal" name="state" value="True"
{% ifequal domainname.state 1 %}checked{% endifequal %}
{% if not domainname %}checked{% endif %}>&nbsp;&nbsp;在用 &nbsp;&nbsp;
</label>
<label class="control-label">
<input type="radio" class="minimal" name="state" value="False"
{% ifequal natrule.state 0 %}checked{% endifequal %}> &nbsp;&nbsp;停用
</label>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">域名备注</label>
<div class="col-sm-8">
<textarea class="form-control" name="desc" rows="5" >{{ domainname.desc }}</textarea>
</div>
</div>
</fieldset>
</div>
<div class="box-footer ">
<div class="row span7 text-center ">
<button type="button" id="btnCancel" class="btn btn-default margin-right " >重置</button>
<button type="button" id="btnSave" class="btn btn-info margin-right " >保存</button>
</div>
</div>
</form>
</div>
{% endblock %}
{% block javascripts %}
<script src="{% static 'plugins/select2/select2.full.min.js' %}"></script>
<script src="{% static 'bootstrap/js/bootstrap-datetimepicker.js' %}"></script>
<script type="text/javascript">
function getUrl() {
if ($("input[name='id']").val()) {
var url = "{% url 'cmdb:eam-domain-update' %}";
} else {
var url = "{% url 'cmdb:eam-domain-create' %}";
}
return url
}
$("#btnSave").click(function () {
var data = $("#addForm").serialize();
$.ajax({
type: $("#addForm").attr('method'),
url: getUrl(),
data: data,
cache: false,
success: function (msg) {
if (msg.result) {
layer.alert('数据保存成功!', {icon: 1}, function (index) {
parent.layer.closeAll(); //关闭所有弹窗
});
} else {
layer.alert(msg.error, {icon: 5});
//$('errorMessage').html(msg.message)
}
return;
}
});
});
/*点取消刷新新页面*/
$("#btnCancel").click(function () {
window.location.reload();
})
/*input 时间输入选择*/
$(".form_datetime").datetimepicker({
language: 'zh',
minView: 'month', //选择范围知道日期不选择时分
//weekStart: 1,
//todayBtn: 1,
autoclose: 1,
todayHighlight: 1,
//startView: 2,
forceParse: 0,
showMeridian: 1,
format: 'yyyy-mm-dd'
}).on('changeDate', function (ev) {
$(this).datetimepicker('hide');
});
// select2
$(function () {
//Initialize Select2 Elements
$(".select2").select2();
});
</script>
{% endblock %}