diff --git a/src/perl/PMDA/PMDA.xs b/src/perl/PMDA/PMDA.xs index 3884926..33d339f 100644 --- a/src/perl/PMDA/PMDA.xs +++ b/src/perl/PMDA/PMDA.xs @@ -498,7 +498,7 @@ update_hash_indom(SV *insts, pmInDom indom) hv_iterinit(ihash); while ((data = hv_iternextsv(ihash, &instance, &instsize)) != NULL) - pmdaCacheStore(indom, PMDA_CACHE_ADD, instance, data); + pmdaCacheStore(indom, PMDA_CACHE_ADD, instance, SvREFCNT_inc(data)); sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE); if (sts < 0) diff --git a/src/pmdas/cifs/pmdacifs.pl b/src/pmdas/cifs/pmdacifs.pl index b06b99a..2900146 100644 --- a/src/pmdas/cifs/pmdacifs.pl +++ b/src/pmdas/cifs/pmdacifs.pl @@ -42,7 +42,7 @@ my $PMDA; # }; # Maps share name to (instance number, smb version) -my %SHARES; +my (%SHARES, %SMB1_SHARES, %SMB2_SHARES); # Maps (smb version, item name) to item number my %ITEMS; @@ -535,7 +535,7 @@ sub parse_stat_file { sub cifs_init { - $PMDA = PCP::PMDA->new(DOM, PMID); + $PMDA = PCP::PMDA->new(DOM, 121); my %indoms = ('all' => ALL_MOUNT_INDOM, 'smb1' => SMB1_MOUNT_INDOM, 'smb2' => SMB2_MOUNT_INDOM); @@ -625,9 +625,9 @@ sub cifs_init { parse_stat_file(); # Add one INDOM per protocol - $PMDA->add_indom(SMB1_MOUNT_INDOM, {}, '', ''); - $PMDA->add_indom(SMB2_MOUNT_INDOM, {}, '', ''); - $PMDA->add_indom(ALL_MOUNT_INDOM, {}, '', ''); + $PMDA->add_indom(ALL_MOUNT_INDOM, {}, 'Instance domain for all SMB mounts', ''); + $PMDA->add_indom(SMB1_MOUNT_INDOM, {}, 'Instance domain for SMB v1 mounts', ''); + $PMDA->add_indom(SMB2_MOUNT_INDOM, {}, 'Instance domain for SMB v2 or v3 mounts', ''); $PMDA->set_fetch(\&cifs_fetch); $PMDA->set_fetch_callback(\&cifs_fetch_callback); @@ -637,21 +637,19 @@ sub cifs_init { sub cifs_fetch { parse_stat_file(); - my (%smb1, %smb2); - for my $s (keys %SHARES) { if ($SHARES{$s}{proto} eq 'smb1') { - $smb1{$s} = $SHARES{$s}; + $SMB1_SHARES{$s} = $SHARES{$s}; } else { - $smb2{$s} = $SHARES{$s}; + $SMB2_SHARES{$s} = $SHARES{$s}; } } $PMDA->replace_indom(ALL_MOUNT_INDOM, \%SHARES); - $PMDA->replace_indom(SMB1_MOUNT_INDOM, \%smb1); - $PMDA->replace_indom(SMB2_MOUNT_INDOM, \%smb2); - $PMDA->log("fetch: ".Dumper(\%smb1)); + $PMDA->replace_indom(SMB1_MOUNT_INDOM, \%SMB1_SHARES); + $PMDA->replace_indom(SMB2_MOUNT_INDOM, \%SMB2_SHARES); + $PMDA->log("fetch: ".Dumper(\%SMB1_SHARES)); } sub cifs_fetch_callback { @@ -660,11 +658,14 @@ sub cifs_fetch_callback { my ($cluster, $item, $inst) = @_; my $pmid = pmda_pmid($cluster, $item); my $indom = $PMID_INDOM{$pmid}; - # $PMDA->log("fetch_cb: $cluster, $item, $inst"); + $PMDA->log("fetch_cb: $cluster, $item, $inst and $indom"); if ($inst != PM_IN_NULL && $indom != PM_INDOM_NULL) { - my $v = pmda_inst_lookup($indom, $inst); - $PMDA->log("fetch_cb: ".Dumper($v)); + my $valueref = pmda_inst_lookup($indom, $inst); + return (PM_ERR_INST, 0) unless defined($valueref); + $PMDA->log("fetch_cb: ".Dumper($valueref)); + my %v = %$valueref; + $PMDA->log("fetch got instance hash with (id,proto): (".($v{id}).",".($v{proto}).")"); } if ($cluster == CLUSTER_GLOB) {