6 # PODNAME: wtscript2json
7 # ABSTRACT: convert read configuration into JSON
11 use File
::Slurp
qw(write_file);
14 use List
::MoreUtils
qw(zip);
15 use Params
::Util
qw(_ARRAY);
18 use WWW
::Mechanize
::Script
::Util
qw(:ALL);
19 use WWW
::Mechanize
::Script
;
21 our $VERSION = '0.001_003';
25 "output-pattern" => []
28 "input-files=s@" => $opts{"input-files"},
29 "output-files=s@" => $opts{"output-files"},
30 "output-pattern=s{2}" => $opts{"output-pattern"},
34 GetOptions
( \
%opts, @options ) or pod2usage
(2);
37 @
{ $opts{"input-files"} } or delete $opts{"input-files"};
38 @
{ $opts{"output-files"} } or delete $opts{"output-files"};
39 @
{ $opts{"output-pattern"} } or delete $opts{"output-pattern"};
42 defined( $opts{help
} )
50 defined( $opts{usage
} ) and $opts{usage
} and pod2usage
(1);
51 opt_required_all
( \
%opts, qw(input-files) );
52 opt_exclusive
( \
%opts, qw(output-files output-pattern) );
53 opt_required_one
( \
%opts, qw(output-files output-pattern) );
55 _ARRAY
( $opts{"input-files"} ) and $opts{"input-files"} = [ split(",", join(",", @
{$opts{"input-files"}}) ) ];
56 _ARRAY
( $opts{"output-files"} ) and $opts{"output-files"} = [ split(",", join(",", @
{$opts{"output-files"}}) ) ];
58 _ARRAY
( $opts{"input-files"} )
59 and _ARRAY
( $opts{"output-files"} )
60 and scalar( @
{ $opts{"input-files"} } ) != scalar( @
{ $opts{"output-files"} } )
63 -message
=> "Count of --input-files and --output-files doesn't match",
69 _ARRAY
( $opts{"output-files"} )
70 ? zip
( @
{ $opts{"input-files"} }, @
{ $opts{"output-files"} } )
72 my %cfg = load_config
();
74 my $coder = JSON
->new();
75 _ARRAY
( $cfg{wtscript_extensions
} )
76 and Config
::Any
::WTScript
->extensions( @
{ $cfg{wtscript_extensions
} } );
77 foreach my $filename ( @
{ $opts{"input-files"} } )
79 my @script_files = find_scripts
( \
%cfg, $filename );
80 my $scripts = Config
::Any
->load_files(
82 files
=> [@script_files],
87 if ( $opts{"output-files"} )
89 @script_files = keys %{$scripts};
90 scalar(@script_files) > 1
93 -message
=> "filename $filename is ambigious: " . join( ", ", @script_files ),
97 scalar(@script_files) < 1
98 and next; # file not found or not parsable ...
99 # merge into default and previous loaded config ...
100 my $json = $coder->pretty->encode( $scripts->{ $script_files[0] } );
101 write_file
( $in2out{$filename}, $json );
105 while ( my ( $script_file, $script ) = each(%$scripts) )
107 my $json = $coder->pretty->encode($script);
108 ( my $target = $script_file ) =~
109 s/$opts{"output-pattern"}->[0]/$opts{"output-pattern"}->[1]/;
110 write_file
( $target, $json );
119 wtscript2json is a helper to convert WebTest Script files into a modern
120 format. Currently the format is hard-coded to JSON.
122 To avoid conflicts or duplicates running check_web(2), it's recommended to
123 use different C<script_dirs> in special configuration files for check_web(2)
124 and wtscript2json (check-web2.json vs. wtscript2json.json vs. check_web.json
125 as common configuration file for both). See
126 L<WWW::Mechanize::Script::Util/load_config> for further information.
130 # search in $config->{script_dirs} for any loadable script config
131 $ wtscript2json --input-files service1/script1,service1/script2,service2/cool_script \
132 --output-files /opt/new_checks/service1/script1.json \
133 --output-files /opt/new_checks/service1/script2.json \
134 --output-files /opt/new_checks/service2/cool_script.json
136 # in-location conversion ...
137 $ find . -name "*splunk*"
138 ./check_web_config/log/test_splunk_1.txt
139 ./check_web_config/log/test_splunk_2.txt
140 ./check_web_config/log/test_splunk_3.txt
141 ./check_web_config/log/test_splunk_4.txt
142 $ wtscript2json --input-files log/test_splunk[1-4] --output-pattern .txt .json
143 $ find . -name "*splunk*"
144 $ find . -name "*splunk*"
145 ./check_web_config/log/test_splunk_1.txt
146 ./check_web_config/log/test_splunk_2.txt
147 ./check_web_config/log/test_splunk_3.txt
148 ./check_web_config/log/test_splunk_4.txt
149 ./check_web_config/log/test_splunk_4.json
150 ./check_web_config/log/test_splunk_3.json
151 ./check_web_config/log/test_splunk_2.json
152 ./check_web_config/log/test_splunk_1.json