1[% SET user_can_port_control = user_has_role('port_control') %] 2<table class="table table-condensed table-striped"> 3 <tbody> 4 <tr> 5 <td>System Name</td> 6 <td>[% d.name | html_entity %]</td> 7 </tr> 8 <tr> 9 <td>Location 10 [% IF user_can_port_control %] 11 <i class="icon-edit nd_edit-icon nd_device-details-edit"></i> 12 [% END %] 13 </td> 14 [% IF user_can_port_control %] 15 <td class="nd_editable-cell" contenteditable="true" 16 data-field="location" data-for-device="[% d.ip | html_entity %]"> 17 [% d.location | html_entity %] 18 </td> 19 [% ELSE %] 20 <td> 21 <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" 22 href="[% search_device | none %]&q=[% d.location | uri %]&location=[% d.location | uri %]">[% d.location | html_entity %]</a> 23 </td> 24 [% END %] 25 </tr> 26 <tr> 27 <td>Contact 28 [% IF user_can_port_control %] 29 <i class="icon-edit nd_edit-icon nd_device-details-edit"></i> 30 [% END %] 31 </td> 32 [% IF user_can_port_control %] 33 <td class="nd_editable-cell" contenteditable="true" 34 data-field="contact" data-for-device="[% d.ip | html_entity %]"> 35 [% d.contact | html_entity %] 36 </td> 37 [% ELSE %] 38 <td>[% d.contact | html_entity %]</td> 39 [% END %] 40 </tr> 41 <tr> 42 <td>Vendor / Model</td> 43 <td> 44 <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" 45 href="[% search_device | none %]&q=[% d.vendor | uri %]&vendor=[% d.vendor | uri %]">[% d.vendor | html_entity %]</a> 46 / 47 <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" 48 href="[% search_device | none %]&q=[% d.model | uri %]&model=[% d.model | uri %]">[% d.model | html_entity %]</a> 49 </td> 50 </tr> 51 <tr> 52 <td>OS / Version</td> 53 <td> 54 <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" 55 href="[% search_device | none %]&q=[% d.os | uri %]&os=[% d.os | uri %]">[% d.os | html_entity %]</a> 56 / 57 <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" 58 href="[% search_device | none %]&q=[% d.os_ver | uri %]&os_ver=[% d.os_ver | uri %]">[% d.os_ver | html_entity %]</a> 59 </td> 60 </tr> 61 <tr> 62 <td>Serial Number</td> 63 <td>[% d.serial | html_entity %]</td> 64 </tr> 65 <tr> 66 <td>Description</td> 67 <td>[% d.description | html_entity | html_line_break %]</td> 68 </tr> 69 [% IF settings._extra_device_details.size %] 70 [% FOREACH config IN settings._extra_device_details %] 71 <tr> 72 <td> 73 [% config.label | html_entity %] 74 </td> 75 <td> 76 [% TRY %] 77 [% INCLUDE "plugin/${config.name}/device_details.tt" %] 78 [% CATCH %] 79 <!-- dummy content required by Template Toolkit TRY --> 80 [% END %] 81 </td> 82 </tr> 83 [% END %] 84 [% END %] 85 <tr> 86 <td>Administration</td> 87 <td> 88 <a href="ssh://[% d.ip | uri %]" target="_blank"> 89 <span class="label label-info"><i class="icon-keyboard"></i> SSH</span></a> 90 <a href="telnet://[% d.ip | uri %]" target="_blank"> 91 <span class="label label-info"><i class="icon-keyboard"></i> Telnet</span></a> 92 <a href="https://[% d.ip | uri %]/" target="_blank"> 93 <span class="label label-info"><i class="icon-external-link"></i> Web</span></a> 94 </td> 95 </tr> 96 <tr> 97 <td>SNMP Class</td> 98 <td><a target="_blank" href="https://metacpan.org/pod/[% d.snmp_class | uri %]">[% d.snmp_class | html_entity %]</a></td> 99 </tr> 100 <tr> 101 <td>Uptime</td> 102 <td>[% d.uptime_age | html_entity %]</td> 103 </tr> 104 <tr> 105 <td>Layers</td> 106 <td> 107 [% (d.layers.substr(7,1) ? '<span class="badge badge-success">1</span>' : '<span class="badge"> </span>') | none %] 108 [% (d.layers.substr(6,1) ? '<span class="badge badge-success">2</span>' : '<span class="badge"> </span>') | none %] 109 [% (d.layers.substr(5,1) ? '<span class="badge badge-success">3</span>' : '<span class="badge"> </span>') | none %] 110 [% (d.layers.substr(4,1) ? '<span class="badge badge-success">4</span>' : '<span class="badge"> </span>') | none %] 111 [% (d.layers.substr(3,1) ? '<span class="badge badge-success">5</span>' : '<span class="badge"> </span>') | none %] 112 [% (d.layers.substr(2,1) ? '<span class="badge badge-success">6</span>' : '<span class="badge"> </span>') | none %] 113 [% (d.layers.substr(1,1) ? '<span class="badge badge-success">7</span>' : '<span class="badge"> </span>') | none %] 114 </td> 115 </tr> 116 <tr> 117 <td>Last Discover</td> 118 <td>[% d.last_discover_stamp | html_entity %]</td> 119 </tr> 120 <tr> 121 <td>Last Arpnip</td> 122 <td>[% d.last_arpnip_stamp | html_entity %]</td> 123 </tr> 124 <tr> 125 <td>Last Macsuck</td> 126 <td>[% d.last_macsuck_stamp | html_entity %]</td> 127 </tr> 128 <tr> 129 <td>Hardware Status</td> 130 <td>Fan: [% d.fan | html_entity %] 131 <br/>PS1 [[% d.ps1_type | html_entity %]]: [% d.ps1_status | html_entity %] 132 <br/>PS2 [[% d.ps2_type | html_entity %]]: [% d.ps2_status | html_entity %]</td> 133 </tr> 134 [% IF p.size %] 135 <tr> 136 <td>PoE Status</td> 137 <td> 138 [% FOREACH m IN p %] 139 [% UNLESS m.module == 1 %] 140 <br/> 141 [% END %] 142 Module [% m.module | html_entity %]: [% m.status | html_entity %], [% m.poe_capable_ports | html_entity %] power-capable ports, [% m.poe_powered_ports | html_entity %] powered ([% m.poe_disabled_ports | html_entity %] admin disabled, [% m.poe_errored_ports | html_entity %] errors), [% m.poe_power_committed | html_entity %]/[% m.power | html_entity %] watts committed. 143 [% END %] 144 </td> 145 </tr> 146 [% END %] 147 <tr> 148 <td>MAC Address</td> 149 <td>[% d.mac | html_entity %]</td> 150 </tr> 151 <tr> 152 <td>VTP Domain</td> 153 <td>[% d.vtp_domain | html_entity %]</td> 154 </tr> 155 [% IF user_has_role('admin') %] 156 <tr data-for-device="[% d.ip | html_entity %]"> 157 <td>Admin Tasks</td> 158 <td> 159 <input type="hidden" data-form="discover" value="[% d.ip | html_entity %]" name="device"/> 160 <button class="btn btn-info btn-small nd_adminbutton" name="discover">Discover</button> 161 162 [% IF d.layers.substr(5,1) %] 163 <input type="hidden" data-form="arpnip" value="[% d.ip | html_entity %]" name="device"/> 164 <button class="btn btn-info btn-small nd_adminbutton" name="arpnip">Arpnip</button> 165 [% ELSE %] 166 <button class="btn btn-default btn-small disabled">Arpnip</button> 167 [% END %] 168 169 [% IF d.layers.substr(6,1) %] 170 <input type="hidden" data-form="macsuck" value="[% d.ip | html_entity %]" name="device"/> 171 <button class="btn btn-info btn-small nd_adminbutton" name="macsuck">Macsuck</button> 172 [% ELSE %] 173 <button class="btn btn-default btn-small disabled">Macsuck</button> 174 [% END %] 175 176 <input type="hidden" data-form="nbtstat" value="[% d.ip | html_entity %]" name="device"/> 177 <button class="btn btn-info btn-small nd_adminbutton" name="nbtstat">NBTstat</button> 178 179 <button class="btn btn-danger btn-small pull-right" 180 data-toggle="modal" data-target="#nd_devdel" type="button">Delete</button> 181 182 <div id="nd_devdel" class="nd_modal nd_deep-horizon modal hide fade" tabindex="-1" 183 role="dialog" aria-labelledby="nd_devdel-label" aria-hidden="true"> 184 <div class="modal-header"> 185 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button> 186 <h3 id="nd_devdel-label">Confirm Delete: [% d.dns || d.ip | html_entity %]</h3> 187 </div> 188 <div class="modal-body"> 189 <blockquote> 190 <ul> 191 <li><p>This action is immediate and not reversible</p></li> 192 <li><p>All associated Nodes may be removed from the database</p></li> 193 </ul> 194 </blockquote> 195 <textarea id="nd_devdel-log" class="input-block-level" rows="2" data-form="delete" 196 placeholder="Enter a log message" name="log"></textarea> 197 <label class="checkbox"> 198 <input id="nd_devdel-archive" type="checkbox" data-form="delete" name="archive"> 199 <h4 class="nd_unbolden">Archive Nodes</h4> 200 </label> 201 <input type="hidden" data-form="delete" value="[% d.ip | html_entity %]" name="device"/> 202 </div> 203 <div class="modal-footer"> 204 <button class="btn btn-success" data-dismiss="modal" aria-hidden="true">Cancel</button> 205 <button class="btn btn-danger nd_adminbutton" name="delete" data-dismiss="modal">Confirm</button> 206 </div> 207 </div> 208 </td> 209 </tr> 210 [% END %] 211 </tbody> 212</table> 213