Splunklib

 view release on metacpan or  search on metacpan

lib/Splunklib/Intersplunk.pm  view on Meta::CPAN

            # Expand the value of __mv_[key] to a list, store it in key, and delete __mv_[key]
            my $vals = [];
            if (decodeMV($result->[$lookup->{$mv_key}], $vals)) {
               #$result{$key} = $vals;
               #if (@{$result{$key}} == 1) {
                  #$result{$key} = $result{$key}->[0];
               #}
               #delete $result{$mv_key};
               # XXX: todo
            }
         }
      }

      push @$results, $result;
   }

   return [ $results, $header, $lookup ];
}

sub isGetInfo {
   my ($args) = @_;

   if (@$args >= 1 && $args->[0] eq '__GETINFO__') {
      shift @$args;  # Strip it
      return 1;
   }
   elsif (@$args >= 1 && $args->[0] eq '__EXECUTE__') {
      shift @$args;  # Strip it
      return 0;
   }
   else {
      # XXX: error handling
      exit(0);
   }

   return 0;
}

sub outputGetInfo {
   my ($settings, $stdout) = @_;

   # Below is the correct field order to use.
   # We currently don't follow on the output, but it seems to be ok.
   $settings ||= {
      changes_colorder => 1,
      clear_required_fields => 0,
      enableheader => 1,
      generating => 0,
      local => 0,
      maxinputs => 0,
      needs_empty_results => 1,
      outputheader => 1,
      overrides_timeorder => 0,
      passauth => 0,
      perf_warn_limit => 0,
      required_fields => '',
      requires_srinfo => 0,
      retainsevents => 1,
      run_in_preview => 1,
      stderr_dest => 'log',
      streaming => 1,
      supports_multivalues => 1,
      supports_rawargs => 1,
      __mv_changes_colorder => '',
      __mv_clear_required_fields => '',
      __mv_enableheader => '',
      __mv_generating => '',
      __mv_local => '',
      __mv_maxinputs => '',
      __mv_needs_empty_results => '',
      __mv_outputheader => '',
      __mv_overrides_timeorder => '',
      __mv_passauth => '',
      __mv_perf_warn_limit => '',
      __mv_required_fields => '',
      __mv_requires_srinfo => '',
      __mv_retainsevents => '',
      __mv_run_in_preview => '',
      __mv_stderr_dest => '',
      __mv_streaming => '',
      __mv_supports_multivalues => '',
      __mv_supports_rawargs => '',
   };

   my $header = '';
   my $values = '';
   for my $k (sort { $a cmp $b } keys %$settings) {
      $header .= "$k,";
      $values .= $settings->{$k}.",";
   }
   $header =~ s/,$//;
   $values =~ s/,$//;

   print $stdout "\r\n";
   print $stdout "$header\r\n";
   print $stdout "$values\r\n";

   return 1;
}

sub outputResults {
   my ($ary, $messages, $fields, $mvdelim, $stdout) = @_;

   $mvdelim ||= '\n';

   my $results = $ary->[0];
   my $header = $ary->[1];
   my $lookup = $ary->[2];

   #
   # Example message header
   #
   # $messages = {
   #    streaming_preop' => '0',
   #    streaming' => '0',
   #    generating' => '0',
   #    retainsevents' => '0',
   #    requires_preop' => '0',
   #    generates_timeorder' => '0',
   #    overrides_timeorder' => '0',
   #    clear_required_fields' => '0',
   # };

   if (defined($messages)) {
      # message header is everything before the first empty line, similar to the input
      # header format.  also key = value, with stripping of whitespace
      for my $level (sort { $a <=> $b } keys %$messages) {
         print $stdout $level."=".$messages->{$level}."\r\n";
      }
      print $stdout "\r\n";
   }

   if (@$results == 0) {
      return;
   }

   my $s = {};
   my $l = [];
   # Check each entry to see if it is a list (multivalued).
   # If so, set the multivalued key to the proper encoding.
   # Replace the list with a newline separated string of the values.
   for my $result (@$results) {
      #for my $key (keys %$result) {
      for my $key (@$result) {
         # XXX: todo
         #if (ref($result->{$key}) eq 'ARRAY') {
            #$result->{"__mv_$key"} = getEncodedMV($result->{$key});
            #$result->{$key} = join($mvdelim, @{$result->{$key}});
         #}

         #if (! exists($s->{$key})) {
            #$s->{$key} = 1;
            #push @$l, $key;
         #}
      }
   }

   my $h;
   if (! $fields) {
      $h = $header;
   }
   else {
      $h = $fields;
   }

   _csv_writer($ary, $stdout);

   return 1;
}

1;

__END__

=head1 NAME



( run in 1.006 second using v1.01-cache-2.11-cpan-df04353d9ac )