2010-06-20 17:21:35 +00:00
<? php
2018-04-07 15:55:28 -05:00
2018-07-30 16:58:38 -05:00
use App\Models\Device ;
2018-04-07 15:55:28 -05:00
2020-06-16 14:13:19 +02:00
require_once 'includes/html/modal/device_maintenance.inc.php' ;
2018-11-28 16:49:18 -06:00
$device_model = Device :: find ( $device [ 'device_id' ]);
2022-08-30 12:55:37 -05:00
if ( ! empty ( $_POST [ 'editing' ])) {
2019-08-05 14:16:05 -05:00
if ( Auth :: user () -> hasGlobalAdmin ()) {
2021-11-18 15:46:22 -06:00
$reload = false ;
2017-12-20 17:17:52 +03:00
if ( isset ( $_POST [ 'parent_id' ])) {
2018-07-30 16:58:38 -05:00
$parents = array_diff (( array ) $_POST [ 'parent_id' ], [ '0' ]);
// TODO avoid loops!
2018-11-28 16:49:18 -06:00
$device_model -> parents () -> sync ( $parents );
2017-12-20 17:17:52 +03:00
}
2018-11-28 16:49:18 -06:00
$override_sysLocation = ( int ) isset ( $_POST [ 'override_sysLocation' ]);
2021-02-22 11:17:40 +01:00
$override_sysLocation_string = $_POST [ 'sysLocation' ] ?? null ;
2011-03-31 17:19:54 +00:00
2018-11-28 16:49:18 -06:00
if ( $override_sysLocation ) {
2021-02-22 11:17:40 +01:00
$device_model -> override_sysLocation = false ; // allow override (will be set to actual value later)
$device_model -> setLocation ( $override_sysLocation_string , true );
optional ( $device_model -> location ) -> save ();
2018-11-28 16:49:18 -06:00
} elseif ( $device_model -> override_sysLocation ) {
// no longer overridden, clear location
$device_model -> location () -> dissociate ();
2011-03-31 17:19:54 +00:00
}
2015-07-20 16:52:33 +01:00
2018-11-28 16:49:18 -06:00
$device_model -> override_sysLocation = $override_sysLocation ;
2021-11-18 15:46:22 -06:00
$device_model -> display = empty ( $_POST [ 'display' ]) ? null : $_POST [ 'display' ];
2018-11-28 16:49:18 -06:00
$device_model -> purpose = $_POST [ 'descr' ];
2020-01-27 13:19:14 +01:00
$device_model -> poller_group = $_POST [ 'poller_group' ];
2018-11-28 16:49:18 -06:00
$device_model -> ignore = ( int ) isset ( $_POST [ 'ignore' ]);
$device_model -> disabled = ( int ) isset ( $_POST [ 'disabled' ]);
2020-01-10 01:46:52 +01:00
$device_model -> disable_notify = ( int ) isset ( $_POST [ 'disable_notify' ]);
2018-11-28 16:49:18 -06:00
$device_model -> type = $_POST [ 'type' ];
2020-01-30 13:20:30 +01:00
$device_model -> overwrite_ip = $_POST [ 'overwrite_ip' ];
2011-03-31 17:19:54 +00:00
2018-11-28 16:49:18 -06:00
if ( $device_model -> isDirty ( 'type' )) {
set_dev_attrib ( $device , 'override_device_type' , true );
2017-01-22 09:49:13 +00:00
}
2021-11-18 15:46:22 -06:00
if ( $device_model -> isDirty ( 'display' )) {
$reload = true ;
}
2018-11-28 16:49:18 -06:00
if ( $device_model -> isDirty ()) {
if ( $device_model -> save ()) {
2021-10-29 09:13:56 -05:00
flash () -> addSuccess ( __ ( 'Device record updated' ));
2018-11-28 16:49:18 -06:00
} else {
2021-10-29 09:13:56 -05:00
flash () -> addError ( __ ( 'Device record update error' ));
2017-01-22 09:49:13 +00:00
}
2015-07-13 20:10:26 +02:00
}
2018-11-28 16:49:18 -06:00
2016-12-08 04:16:05 +00:00
if ( isset ( $_POST [ 'hostname' ]) && $_POST [ 'hostname' ] !== '' && $_POST [ 'hostname' ] !== $device [ 'hostname' ]) {
2019-08-05 14:16:05 -05:00
if ( Auth :: user () -> hasGlobalAdmin ()) {
2021-11-18 15:46:22 -06:00
$result = renamehost ( $device [ 'device_id' ], trim ( $_POST [ 'hostname' ]), 'webui' );
2016-11-12 17:19:22 -07:00
if ( $result == '' ) {
2021-10-29 09:13:56 -05:00
flash () -> addSuccess ( "Hostname updated from { $device [ 'hostname' ] } to { $_POST [ 'hostname' ] } " );
2021-11-18 15:46:22 -06:00
$reload = true ;
2016-11-12 17:19:22 -07:00
} else {
2021-10-29 09:13:56 -05:00
flash () -> addError ( $result . '. Does your web server have permission to modify the rrd files?' );
2016-11-12 17:19:22 -07:00
}
} else {
2021-10-29 09:13:56 -05:00
flash () -> addError ( 'Only administrative users may update the device hostname' );
2016-11-12 17:19:22 -07:00
}
}
2020-01-09 13:07:29 +01:00
2021-03-28 17:25:30 -05:00
$override_sysContact_bool = $_POST [ 'override_sysContact' ];
2020-01-09 13:07:29 +01:00
if ( isset ( $_POST [ 'sysContact' ])) {
2021-03-28 17:25:30 -05:00
$override_sysContact_string = $_POST [ 'sysContact' ];
2020-01-09 13:07:29 +01:00
}
if ( $override_sysContact_bool ) {
set_dev_attrib ( $device , 'override_sysContact_bool' , '1' );
} else {
set_dev_attrib ( $device , 'override_sysContact_bool' , '0' );
}
if ( isset ( $override_sysContact_string )) {
set_dev_attrib ( $device , 'override_sysContact_string' , $override_sysContact_string );
}
2021-11-18 15:46:22 -06:00
// some changed data not stateful, just reload the page
if ( $reload ) {
echo '<script>window.location.reload();</script>' ;
}
2016-08-18 20:28:22 -05:00
} else {
2019-04-11 23:26:42 -05:00
include 'includes/html/error-no-perm.inc.php' ;
2011-03-18 15:30:49 +00:00
}
2010-06-20 17:21:35 +00:00
}
2020-01-09 13:07:29 +01:00
$override_sysContact_bool = get_dev_attrib ( $device , 'override_sysContact_bool' );
2022-08-30 12:55:37 -05:00
$override_sysContact_string = get_dev_attrib ( $device , 'override_sysContact_string' ) ?? '' ;
2020-01-09 13:07:29 +01:00
$disable_notify = get_dev_attrib ( $device , 'disable_notify' );
2011-03-31 17:19:54 +00:00
?>
2020-01-09 13:07:29 +01:00
2014-10-02 20:17:45 +01:00
<div class="row">
2021-01-26 05:13:31 +00:00
<!-- Bootstrap 3 doesn't support mediaqueries for text aligns (e.g. text-md-left), which makes these buttons stagger on sm or xs screens -->
<div class="col-md-2 col-md-offset-2">
2014-10-02 20:17:45 +01:00
<form id="delete_host" name="delete_host" method="post" action="delhost/" role="form">
2019-07-17 07:20:26 -05:00
<?php echo csrf_field() ?>
2014-10-02 20:17:45 +01:00
<input type="hidden" name="id" value="<?php echo $device['device_id']; ?>">
2015-09-15 01:41:39 +05:30
<button type="submit" class="btn btn-danger" name="Submit"><i class="fa fa-trash"></i> Delete device</button>
2014-10-02 20:17:45 +01:00
</form>
</div>
2021-01-26 05:13:31 +00:00
<div class="col-md-2 text-center">
2015-09-15 01:41:39 +05:30
<?php
2019-06-23 00:29:12 -05:00
if (\LibreNMS\Config::get('enable_clear_discovery') == 1 && ! $device['snmp_disable']) {
2020-04-03 08:41:24 -05:00
?>
2021-01-26 05:13:31 +00:00
<button type="submit" id="rediscover" data-device_id="<?php echo $device['device_id']; ?>" class="btn btn-primary" name="rediscover" title="Schedule the device for immediate rediscovery by the poller"><i class="fa fa-retweet"></i> Rediscover device</button>
2020-04-03 08:41:24 -05:00
<?php
2015-09-15 01:41:39 +05:30
}
?>
2014-10-02 20:17:45 +01:00
</div>
2021-01-26 05:13:31 +00:00
<div class="col-md-2 text-right">
<button type="submit" id="reset_port_state" data-device_id="<?php echo $device['device_id']; ?>" class="btn btn-info" name="reset_ports" <button type="submit" id="reset_port_state" data-device_id="<?php echo $device['device_id']; ?>" class="btn btn-info" name="reset_ports" title="Reset interface speed, admin up/down, and link up/down history, clearing associated alarms"><i class="fa fa-recycle"></i> Reset Port State</button>
</div>
2014-10-02 20:17:45 +01:00
</div>
2015-09-16 15:59:57 +05:30
<br>
2014-06-16 23:06:04 +01:00
<form id="edit" name="edit" method="post" action="" role="form" class="form-horizontal">
2019-07-17 07:20:26 -05:00
<?php echo csrf_field() ?>
2014-06-16 23:06:04 +01:00
<input type=hidden name="editing" value="yes">
2016-11-12 17:19:22 -07:00
<div class="form-group" data-toggle="tooltip" data-container="body" data-placement="bottom" title="Change the hostname used for name resolution" >
2022-01-22 06:28:37 -06:00
<label for="edit-hostname-input" class="col-sm-2 control-label" >Hostname / IP</label>
2016-11-12 17:19:22 -07:00
<div class="col-sm-6">
2021-11-18 15:46:22 -06:00
<input type="text" id="edit-hostname-input" name="hostname" class="form-control" disabled value="<?php echo htmlentities($device['hostname']); ?>" />
2016-11-12 17:19:22 -07:00
</div>
<div class="col-sm-2">
2021-11-18 15:46:22 -06:00
<button type="button" name="hostname-edit-button" id="hostname-edit-button" class="btn btn-danger" onclick="toggleHostnameEdit()"> <i class="fa fa-pencil"></i> </button>
</div>
</div>
2022-02-20 12:59:53 -06:00
<div class="form-group" data-toggle="tooltip" data-container="body" data-placement="bottom" title="Display Name for this device. Keep short. Available placeholders: hostname, sysName, sysName_fallback, ip (e.g. '{{ $sysName }}')" >
2022-01-22 06:28:37 -06:00
<label for="edit-display-input" class="col-sm-2 control-label" >Display Name</label>
2021-11-18 15:46:22 -06:00
<div class="col-sm-6">
2022-08-30 12:55:37 -05:00
<input type="text" id="edit-display-input" name="display" class="form-control" placeholder="System Default" value="<?php echo htmlentities($device_model->display ?? ''); ?>">
2016-11-12 17:19:22 -07:00
</div>
2020-01-30 13:20:30 +01:00
</div>
<div class="form-group" data-toggle="tooltip" data-container="body" data-placement="bottom" title="Use this IP instead of resolved one for polling" >
2022-01-22 06:28:37 -06:00
<label for="edit-overwrite_ip-input" class="col-sm-2 control-label text-danger" >Overwrite IP (do not use)</label>
2020-01-30 13:20:30 +01:00
<div class="col-sm-6">
2022-08-30 12:55:37 -05:00
<input type="text" id="edit-overwrite_ip-input" name="overwrite_ip" class="form-control" value="<?php echo htmlentities($device_model->overwrite_ip ?? ''); ?>">
2020-01-30 13:20:30 +01:00
</div>
2016-11-12 17:19:22 -07:00
</div>
<div class="form-group">
2022-01-22 06:28:37 -06:00
<label for="descr" class="col-sm-2 control-label">Description</label>
2015-09-16 15:59:57 +05:30
<div class="col-sm-6">
2021-03-28 17:25:30 -05:00
<textarea id="descr" name="descr" class="form-control"><?php echo \LibreNMS\Util\Clean::html($device_model->purpose, []); ?></textarea>
2015-09-16 15:59:57 +05:30
</div>
2014-06-16 23:06:04 +01:00
</div>
2015-09-16 15:59:57 +05:30
<div class="form-group">
2022-01-22 06:28:37 -06:00
<label for="type" class="col-sm-2 control-label">Type</label>
2015-09-16 15:59:57 +05:30
<div class="col-sm-6">
<select id="type" name="type" class="form-control">
<?php
$unknown = 1;
2019-06-23 00:29:12 -05:00
foreach (\LibreNMS\Config::get('device_types') as $type) {
2015-09-16 15:59:57 +05:30
echo ' <option value="' . $type['type'] . '"';
2018-11-28 16:49:18 -06:00
if ($device_model->type == $type['type']) {
2015-09-16 15:59:57 +05:30
echo ' selected="1"';
$unknown = 0;
}
echo ' >' . ucfirst($type['type']) . '</option>';
}
if ($unknown) {
2020-08-26 20:03:11 +02:00
if (! is_null($device_model->type)) {
$device_type = htmlspecialchars($device_model->type);
echo ' <option value="' . $device_type . '" selected="1" >' . ucfirst($device_type) . '</option>';
} else {
echo ' <option value="other">Other</option>';
}
2015-09-16 15:59:57 +05:30
}
?>
</select>
</div>
</div>
2018-02-07 06:35:00 +01:00
<div class="form-group">
2022-01-22 06:28:37 -06:00
<label for="sysLocation" class="col-sm-2 control-label">Override sysLocation</label>
2018-02-07 06:35:00 +01:00
<div class="col-sm-6">
2019-11-05 00:02:49 +01:00
<input onChange="edit.sysLocation.disabled=!edit.override_sysLocation.checked; edit.sysLocation.select()" type="checkbox" name="override_sysLocation" data-size="small"
2018-02-07 06:35:00 +01:00
<?php
2018-11-28 16:49:18 -06:00
if ($device_model->override_sysLocation) {
2018-02-07 06:35:00 +01:00
echo ' checked="1"';
}
?> />
</div>
2014-06-16 23:06:04 +01:00
</div>
2018-11-28 16:49:18 -06:00
<div class="form-group" title="To set coordinates, include [latitude,longitude]">
2018-02-07 06:35:00 +01:00
<div class="col-sm-2"></div>
<div class="col-sm-6">
<input id="sysLocation" name="sysLocation" class="form-control"
<?php
2018-11-28 16:49:18 -06:00
if (! $device_model->override_sysLocation) {
2018-02-07 06:35:00 +01:00
echo ' disabled="1"';
}
2021-11-18 15:46:22 -06:00
?> value="<?php echo htmlentities($device_model->location); ?>" />
2018-02-07 06:35:00 +01:00
</div>
2014-06-16 23:06:04 +01:00
</div>
2020-01-09 13:07:29 +01:00
<div class="form-group">
<label for="override_sysContact" class="col-sm-2 control-label">Override sysContact</label>
<div class="col-sm-6">
<input onChange="edit.sysContact.disabled=!edit.override_sysContact.checked" type="checkbox" id="override_sysContact" name="override_sysContact" data-size="small"
<?php
if ($override_sysContact_bool) {
echo ' checked="1"';
}
?>
/>
</div>
</div>
<div class="form-group">
<div class="col-sm-2">
</div>
<div class="col-sm-6">
<input id="sysContact" class="form-control" name="sysContact" size="32"
<?php
if (! $override_sysContact_bool) {
echo ' disabled="1"';
}
?>
2021-11-18 15:46:22 -06:00
value="<?php echo htmlentities($override_sysContact_string); ?>" />
2020-01-09 13:07:29 +01:00
</div>
</div>
2018-02-07 06:35:00 +01:00
<div class="form-group">
2022-01-22 06:28:37 -06:00
<label for="parent_id" class="col-sm-2 control-label">This device depends on</label>
2018-02-07 06:35:00 +01:00
<div class="col-sm-6">
2021-01-26 05:13:31 +00:00
<select multiple name="parent_id[]" id="parent_id" class="form-control" style="width: 100%">
2018-02-07 06:35:00 +01:00
<?php
$dev_parents = dbFetchColumn('SELECT device_id from devices WHERE device_id IN (SELECT dr.parent_device_id from devices as d, device_relationships as dr WHERE d.device_id = dr.child_device_id AND d.device_id = ?)', [$device['device_id']]);
if (! $dev_parents) {
2017-12-20 17:17:52 +03:00
$selected = 'selected="selected"';
} else {
$selected = '';
}
2018-02-07 06:35:00 +01:00
?>
<option value="0" <?=$selected?>>None</option>
<?php
2018-02-10 16:18:53 +03:00
$available_devs = dbFetchRows('SELECT `device_id`,`hostname`,`sysName` FROM `devices` WHERE `device_id` <> ? ORDER BY `hostname` ASC', [$device['device_id']]);
2018-02-07 06:35:00 +01:00
foreach ($available_devs as $dev) {
if (in_array($dev['device_id'], $dev_parents)) {
$selected = 'selected="selected"';
} else {
$selected = '';
}
2018-02-10 16:18:53 +03:00
echo '<option value=' . $dev['device_id'] . ' ' . $selected . '>' . $dev['hostname'] . ' (' . $dev['sysName'] . ')</option>';
2018-02-07 06:35:00 +01:00
}
?>
</select>
</div>
2017-12-20 17:17:52 +03:00
</div>
2020-01-27 13:19:14 +01:00
<?php
if (\LibreNMS\Config::get('distributed_poller') === true) {
2020-04-03 08:41:24 -05:00
?>
2020-01-27 13:19:14 +01:00
<div class="form-group">
<label for="poller_group" class="col-sm-2 control-label">Poller Group</label>
<div class="col-sm-6">
<select name="poller_group" id="poller_group" class="form-control input-sm">
2020-02-18 13:26:12 +01:00
<option value="0">General<?=\LibreNMS\Config::get('distributed_poller_group') == 0 ? ' (default Poller)' : ''?></option>
2020-04-03 08:41:24 -05:00
<?php
foreach (dbFetchRows('SELECT `id`,`group_name` FROM `poller_groups` ORDER BY `group_name`') as $group) {
echo '<option value="' . $group['id'] . '"' .
2020-02-18 13:26:12 +01:00
($device_model->poller_group == $group['id'] ? ' selected' : '') . '>' . $group['group_name'];
2020-04-03 08:41:24 -05:00
echo \LibreNMS\Config::get('distributed_poller_group') == $group['id'] ? ' (default Poller)' : '';
echo '</option>';
} ?>
2020-01-27 13:19:14 +01:00
</select>
</div>
</div>
2020-04-03 08:41:24 -05:00
<?php
2020-01-27 13:19:14 +01:00
}//endif
?>
2018-02-07 06:35:00 +01:00
<div class="form-group">
2022-01-22 06:28:37 -06:00
<label for="disabled" class="col-sm-2 control-label">Disable polling and alerting</label>
2018-02-07 06:35:00 +01:00
<div class="col-sm-6">
2019-11-05 00:02:49 +01:00
<input name="disabled" type="checkbox" id="disabled" value="1" data-size="small"
2018-02-07 06:35:00 +01:00
<?php
2018-11-28 16:49:18 -06:00
if ($device_model->disabled) {
2018-02-07 06:35:00 +01:00
echo 'checked=checked';
}
?> />
</div>
2014-06-16 23:06:04 +01:00
</div>
2020-05-22 15:14:03 +02:00
<div class="form-group">
<label for="maintenance" class="col-sm-2 control-label"></label>
<div class="col-sm-6">
2020-06-16 14:13:19 +02:00
<button type="button" id="maintenance" data-device_id="<?php echo $device['device_id']; ?>" <?php echo \LibreNMS\Alert\AlertUtil::isMaintenance($device['device_id']) ? 'disabled class="btn btn-warning"' : 'class="btn btn-success"'?> name="maintenance"><i class="fa fa-wrench"></i> Maintenance Mode</button>
2020-05-22 15:14:03 +02:00
</div>
</div>
2018-02-07 06:35:00 +01:00
<div class="form-group">
2022-01-22 06:28:37 -06:00
<label for="disable_notify" class="col-sm-2 control-label">Disable alerting</label>
2020-01-09 13:07:29 +01:00
<div class="col-sm-6">
<input id="disable_notify" type="checkbox" name="disable_notify" data-size="small"
2020-01-10 01:46:52 +01:00
<?php
if ($device_model->disable_notify) {
echo 'checked=checked';
}
?> />
2020-01-09 13:07:29 +01:00
</div>
</div>
<div class="form-group">
2020-01-09 23:55:09 +01:00
<label for="ignore" class="col-sm-2 control-label" title="Tag device to ignore alerts. Alert checks will still run.
However, ignore tag can be read in alert rules.
2022-01-22 06:28:37 -06:00
If `devices.ignore = 0` or `macros.device = 1` condition is is set and ignore alert tag is on, the alert rule won't match.">Ignore alert tag</label>
2018-02-07 06:35:00 +01:00
<div class="col-sm-6">
2019-11-05 00:02:49 +01:00
<input name="ignore" type="checkbox" id="ignore" value="1" data-size="small"
2018-02-07 06:35:00 +01:00
<?php
2018-11-28 16:49:18 -06:00
if ($device_model->ignore) {
2018-02-07 06:35:00 +01:00
echo 'checked=checked';
}
?> />
</div>
2015-09-16 15:59:57 +05:30
</div>
2018-02-07 06:35:00 +01:00
<div class="row">
<div class="col-md-1 col-md-offset-2">
<button type="submit" name="Submit" class="btn btn-default"><i class="fa fa-check"></i> Save</button>
</div>
2014-06-16 23:06:04 +01:00
</div>
</form>
2011-09-23 10:16:31 +00:00
<br />
2014-10-02 20:17:45 +01:00
<script>
2020-05-01 17:43:31 +05:30
$('[type="checkbox"]').bootstrapSwitch('offColor', 'danger');
2019-11-05 00:02:49 +01:00
2021-05-11 08:08:06 -05:00
$("#maintenance").on("click", function() {
2020-06-16 14:13:19 +02:00
$("#device_maintenance_modal").modal('show');
2020-05-22 15:14:03 +02:00
});
2021-05-11 08:08:06 -05:00
$("#rediscover").on("click", function() {
2014-10-02 20:17:45 +01:00
var device_id = $(this).data("device_id");
$.ajax({
type: 'POST',
2015-08-11 14:54:05 -07:00
url: 'ajax_form.php',
2014-10-02 20:17:45 +01:00
data: { type: "rediscover-device", device_id: device_id },
dataType: "json",
success: function(data){
if(data['status'] == 'ok') {
toastr.success(data['message']);
} else {
toastr.error(data['message']);
}
},
error:function(){
toastr.error('An error occured setting this device to be rediscovered');
}
});
});
2021-05-11 08:08:06 -05:00
$("#reset_port_state").on("click", function() {
2021-01-26 05:13:31 +00:00
var device_id = $(this).data("device_id");
$.ajax({
type: 'POST',
url: 'ajax_form.php',
data: { type: "reset-port-state", device_id: device_id },
dataType: "json",
success: function(data){
if(data['status'] == 'ok') {
toastr.success(data['message']);
} else {
toastr.error(data['message']);
}
},
error:function(){
toastr.error('An error occured while attempting to reset port state alarms');
}
});
});
2021-11-18 15:46:22 -06:00
function toggleHostnameEdit() {
document.getElementById('edit-hostname-input').disabled = ! document.getElementById('edit-hostname-input').disabled;
}
2017-12-20 17:17:52 +03:00
$('#parent_id').select2({
2018-07-17 13:11:16 +01:00
width: 'resolve'
2017-12-20 17:17:52 +03:00
});
2014-10-02 20:17:45 +01:00
</script>
2011-09-23 10:16:31 +00:00
<?php
print_optionbar_start();
2021-03-28 17:25:30 -05:00
[$sizeondisk, $numrrds] = foldersize(Rrd::dirFromHost($device['hostname']));
echo 'Size on Disk: <b>' . \LibreNMS\Util\Number::formatBi($sizeondisk, 2, 3) . '</b> in <b>' . $numrrds . ' RRD files</b>.';
2020-05-01 05:00:33 +05:30
echo ' | Last polled: <b>' . $device['last_polled'] . '</b>';
2019-12-02 13:15:12 +01:00
if ($device['last_discovered']) {
2020-05-01 05:00:33 +05:30
echo ' | Last discovered: <b>' . $device['last_discovered'] . '</b>';
2019-12-02 13:15:12 +01:00
}
2020-05-01 05:00:33 +05:30
print_optionbar_end();
2011-09-23 10:16:31 +00:00
?>