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">&nbsp;</span>') | none %]
108        [% (d.layers.substr(6,1) ? '<span class="badge badge-success">2</span>' : '<span class="badge">&nbsp;</span>') | none %]
109        [% (d.layers.substr(5,1) ? '<span class="badge badge-success">3</span>' : '<span class="badge">&nbsp;</span>') | none %]
110        [% (d.layers.substr(4,1) ? '<span class="badge badge-success">4</span>' : '<span class="badge">&nbsp;</span>') | none %]
111        [% (d.layers.substr(3,1) ? '<span class="badge badge-success">5</span>' : '<span class="badge">&nbsp;</span>') | none %]
112        [% (d.layers.substr(2,1) ? '<span class="badge badge-success">6</span>' : '<span class="badge">&nbsp;</span>') | none %]
113        [% (d.layers.substr(1,1) ? '<span class="badge badge-success">7</span>' : '<span class="badge">&nbsp;</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