use
5.010;
has
'items'
=> (
is
=>
'ro'
,
lazy
=> 1,
builder
=>
'_fetch_items'
);
has
'interfaces'
=> (
is
=>
'rw'
);
has
'hostgroups'
=> (
is
=>
'ro'
,
lazy
=> 1,
builder
=>
'_fetch_hostgroups'
);
has
'graphs'
=> (
is
=>
'ro'
,
lazy
=> 1,
builder
=>
'_fetch_graphs'
);
sub
id {
my
(
$self
,
$value
) =
@_
;
if
(
defined
$value
) {
$self
->data->{hostid} =
$value
;
return
$self
->data->{hostid};
}
else
{
return
$self
->data->{hostid};
}
}
sub
_readonly_properties {
return
{
hostid
=> 1,
available
=> 1,
disable_until
=> 1,
error
=> 1,
errors_from
=> 1,
flags
=> 1,
ipmi_available
=> 1,
ipmi_disable_until
=> 1,
ipmi_error
=> 1,
ipmi_errors_from
=> 1,
jmx_available
=> 1,
jmx_error
=> 1,
jmx_errors_from
=> 1,
maintenance_from
=> 1,
maintenance_status
=> 1,
maintenance_type
=> 1,
maintenanceid
=> 1,
snmp_available
=> 1,
snmp_disable_until
=> 1,
snmp_error
=> 1,
snmp_errors_from
=> 1,
};
}
sub
_prefix {
my
(
undef
,
$suffix
) =
@_
;
if
(
$suffix
) {
return
'host'
.
$suffix
;
}
else
{
return
'host'
;
}
}
sub
_extension {
return
(
output
=>
'extend'
,
selectMacros
=>
'extend'
,
selectInterfaces
=>
'extend'
);
}
sub
name {
my
$self
=
shift
;
return
$self
->data->{name} ||
'???'
;
}
sub
_fetch_items {
my
$self
=
shift
;
my
$items
=
$self
->{root}->fetch(
'Item'
,
params
=> {
hostids
=> [
$self
->data->{hostid} ] });
return
$items
;
}
sub
_fetch_hostgroups {
my
$self
=
shift
;
my
$items
=
$self
->{root}->fetch(
'HostGroup'
,
params
=> {
hostids
=> [
$self
->data->{hostid} ] });
return
$items
;
}
sub
_fetch_graphs {
my
$self
=
shift
;
my
$graphs
=
$self
->{root}->fetch(
'Graph'
,
params
=> {
hostids
=> [
$self
->data->{hostid} ] });
return
$graphs
;
}
sub
_map_interfaces_to_property {
my
(
$self
) =
@_
;
$self
->data->{interfaces} = [
map
{
$_
->data } @{
$self
->interfaces} ];
return
;
}
sub
_map_property_to_interfaces {
my
(
$self
) =
@_
;
my
@interfaces
=
map
{ Zabbix2::API::HostInterface->new(
root
=>
$self
->root,
data
=>
$_
) } @{
$self
->data->{interfaces}};
$self
->interfaces(\
@interfaces
);
return
;
}
before
'create'
=> \
&_map_interfaces_to_property
;
before
'update'
=> \
&_map_interfaces_to_property
;
after
'pull'
=> \
&_map_property_to_interfaces
;
around
'new'
=>
sub
{
my
(
$orig
,
@rest
) =
@_
;
my
$host
=
$orig
->(
@rest
);
$host
->_map_property_to_interfaces;
return
$host
;
};
1;