* fix anomalous name * add gather worker * fix encoding of binary storage * store results back to job * now parsing mbis report to translate * fix the broken report parser * rename gather to snapshot * implement walk code copied from SNMP::Info * can now bulkwalk and parse mibs report and store resolved walk in cache * add func/glob aliasing broken * better aliasing * implement aliasing from globals and funcs * fix regexp for matching netdisco-mibs report * fake cache entry for all ND2 methods called, add comments * also save to logs/snapshots/IP * add doc for netdisco-do * add is_pseudo column to device table * support for loading cache for pseudo devices * check for hrSystemUptime as well as sysUpTime for snmp connect * display pseudo devices with yellow pill for name * color all cells for layers for pseudo * no need to b64 encode binary data in scalars as we b64 whole thing after * tweaked uptime check * store snapshot to database instead of Job * expose snapshots in device details tab * small ux improvements on snap download * fixes for errors in subnet mask searching * hide snapshot management for pseudo devices * update to use new netdisco-mibs object cache * update for new format oids file * start of work on loading walk into db for browsing * store values and meta * add auto increment col and oid index to browser * start web plugin for browser * add virtual search for oid children * have all oid in separte table (60 seconds load on my laptop) * rename table and add relation * store oid as int array * fix sql for children * make jstree start working * working very slow tree expand * fix to work when first displaying tree * store both oid and oid_parts * simplify SQL to speed up (more complicated perl) * fix sql bug, add better index, prettify tree * render the snmp node detail * add node template, make scrollable, pretty print data values (insecure) * store munge hint * some dubious code to munge the data * make sure to filter by IP on device_browser * make safer the rendering of value data (but need to come back to key ordering) * fix sorting on object values * limit the opening of child nodes to keep response good and unclutter * factor out the munge and make safer * reject unknown mungers * show the munger and option (not working) to change * additional js for munge select * complete custom munge * change so that saving to database is only at CLI and on request * hide snmp tab if no browser rows in the db * add helpful message when no browser rows for the device * stub handler for search and add recurse control * working search * minor ui fixes * implement typeahead for leaf search * limit rows in typeahead * make sure device_browser is visited in delete and renumber * add requirements for this branch * update manifest * make sure node search and typeahead are restricted to current device only
		
			
				
	
	
		
			96 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| <table id="data-table" class="table table-striped table-bordered" width="100%" cellspacing="0">
 | |
|   <thead>
 | |
|     <tr>
 | |
|       <th class="nd_center-cell">Device Name</th>
 | |
|       <th class="nd_center-cell">Device IP</th>
 | |
|       <th class="nd_center-cell">Number of Ports</th>
 | |
|       <th class="nd_center-cell">Services</th>
 | |
|       <th class="nd_center-cell">Action</th>
 | |
|     </tr>
 | |
|   </thead>
 | |
|   <tbody>
 | |
|     <tr>
 | |
|       <td class="nd_center-cell"><input data-form="add" name="name" type="text"></td>
 | |
|       <td class="nd_center-cell"><input data-form="add" name="ip" type="text"></td>
 | |
|       <td class="nd_center-cell"><input data-form="add" name="ports" type="number" value="1"></td>
 | |
|       <td class="nd_center-cell">
 | |
|         <span class="badge"> </span><span class="badge"> </span>
 | |
|         <a class="nd_layer-three-link" href="#" rel="tooltip" data-placement="bottom" data-offset="3" data-title="Enable Arpnip"><span class="badge">3</span></a><span class="badge"> </span><span class="badge"> </span><span class="badge"> </span><span class="badge"> </span>
 | |
|         <input data-form="add" name="layers" type="hidden" value="00000000">
 | |
|       </td>
 | |
|       <td class="nd_center-cell">
 | |
|         <button class="btn btn-small nd_adminbutton" name="add" type="submit"><i class="icon-plus-sign"></i> Add</button>
 | |
|       </td>
 | |
|     </tr>
 | |
|     [% SET count = 0 %]
 | |
|     [% WHILE (row = results.next) %]
 | |
|     [% SET count = count + 1 %]
 | |
|     <tr>
 | |
|       <td class="nd_center-cell"><a class="nd_linkcell"
 | |
|         href="[% uri_for('/device') | none %]?q=[% row.ip | uri %]">[% row.name | html_entity %]</a></td>
 | |
|       <td class="nd_center-cell">[% row.ip | html_entity %]</td>
 | |
|       <td class="nd_center-cell">
 | |
|         <input data-form="update" name="ports" type="number" value="[% row.port_count | html_entity %]">
 | |
|       </td>
 | |
|       <td class="nd_center-cell">
 | |
|         <span class="badge[% ' badge-success' IF row.layers.substr(7,1) %]">[% row.layers.substr(7,1) ? '1' : ' ' | none %]</span><span class="badge[% ' badge-success' IF row.layers.substr(6,1) %]">[% row.layers.substr(6,1) ? '2' : ' ' | none %]</span>
 | |
|         <a class="nd_layer-three-link" href="#" rel="tooltip" data-placement="bottom" data-offset="3" data-title="Enable Arpnip"><span class="badge[% ' badge-success' IF row.layers.substr(5,1) %]">3</span></a><span class="badge[% ' badge-success' IF row.layers.substr(4,1) %]">[% row.layers.substr(4,1) ? '4' : ' ' | none %]</span><span class="badge[% ' badge-success' IF row.layers.substr(3,1) %]">[% row.layers.substr(3,1) ? '5' : ' ' | none %]</span><span class="badge[% ' badge-success' IF row.layers.substr(2,1) %]">[% row.layers.substr(2,1) ? '6' : ' ' | none %]</span><span class="badge[% ' badge-success' IF row.layers.substr(1,1) %]">[% row.layers.substr(1,1) ? '7' : ' ' | none %]</span>
 | |
|         <input data-form="update" name="layers" type="hidden" value="[% row.layers | html_entity %]">
 | |
|       </td>
 | |
|       <td class="nd_center-cell">
 | |
|         <input data-form="update" name="name" type="hidden" value="[% row.name | html_entity %]">
 | |
|         <input data-form="update" name="ip" type="hidden" value="[% row.ip | html_entity %]">
 | |
|         <button class="btn nd_adminbutton" name="update" type="submit"><i class="icon-save text-warning"></i></button>
 | |
| 
 | |
|         <button class="btn" data-toggle="modal"
 | |
|           data-target="#nd_devdel-[% count | html_entity %]" type="button"><i class="icon-trash text-error"></i></button>
 | |
| 
 | |
|         <div id="nd_devdel-[% count | html_entity %]" class="nd_modal nd_deep-horizon modal hide fade" tabindex="-1"
 | |
|           role="dialog" aria-labelledby="nd_devdel-label-[% count | html_entity %]" aria-hidden="true">
 | |
|           <div class="modal-header">
 | |
|             <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
 | |
|             <h3 id="nd_devdel-label-[% count | html_entity %]">Are you sure?</h3>
 | |
|           </div>
 | |
|           <div class="modal-body">
 | |
|             <blockquote>
 | |
|               <p class="text-info">
 | |
|                 Pseudo-device "[% row.name | html_entity %] / [% row.ip | html_entity %]" will be deleted.</p>
 | |
|             </blockquote>
 | |
|             <input data-form="delete" name="device" type="hidden" value="[% row.ip | html_entity %]">
 | |
|           </div>
 | |
|           <div class="modal-footer">
 | |
|             <button class="btn btn-success" data-dismiss="modal" aria-hidden="true">Cancel</button>
 | |
|             <button class="btn btn-danger nd_adminbutton" name="delete" data-dismiss="modal">Confirm</button>
 | |
|           </div>
 | |
|         </div>
 | |
|       </td>
 | |
|     </tr>
 | |
|     [% END %]
 | |
|   </tbody>
 | |
| </table>
 | |
| 
 | |
| <script>
 | |
| $(document).ready(function() {
 | |
|   $('#data-table').dataTable({
 | |
|     "columnDefs": [ {
 | |
|         "targets": [ 2, 3 ],
 | |
|         "orderable": false,
 | |
|         "searchable": false
 | |
|       } ],
 | |
| [% INCLUDE 'ajax/datatabledefaults.tt' -%]
 | |
|   } );
 | |
|   $('.nd_layer-three-link').click(function() {
 | |
|     var badge = $(this).children('span').first();
 | |
|     var layers = $(this).parent().children('input').first();
 | |
|     $(badge).toggleClass('badge-success');
 | |
|     if ($(badge).hasClass('badge-success')) {
 | |
|       $(layers).attr('value', '00000100');
 | |
|     }
 | |
|     else {
 | |
|       $(layers).attr('value', '00000000');
 | |
|     }
 | |
|   });
 | |
| } );
 | |
| </script>
 | |
| 
 |