* Updated tools/anvil-daemon to use the JSON module to build the JSON strings going into jobs.json, instead of doing it manually.

Signed-off-by: Digimer <digimer@alteeve.ca>
main
Digimer 6 years ago
parent 831ff14d93
commit eaca4c885f
  1. 24
      Anvil/Tools/Words.pm
  2. 6
      share/words.xml
  3. 39
      tools/anvil-daemon

@ -8,6 +8,7 @@ use warnings;
use Data::Dumper;
use XML::Simple qw(:strict);
use Scalar::Util qw(weaken isweak);
use JSON;
our $VERSION = "3.0.0";
my $THIS_FILE = "Words.pm";
@ -255,10 +256,6 @@ Parameters;
This is the double-banged string to process. It can take and process multiple lines at once, so long as each line is in the above format, broken by a simple new line (C<< \n >>).
=head3 json_escape (optional, default '0')
If set to C<< 1 >>, and double-quote (C<< " >>) characters will be escaped (ie: for use in JSON files).
=cut
sub parse_banged_string
{
@ -268,13 +265,9 @@ sub parse_banged_string
my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3;
# Setup default values
my $out_string = "";
my $key_string = defined $parameter->{key_string} ? $parameter->{key_string} : 0;
my $json_escape = defined $parameter->{json_escape} ? $parameter->{json_escape} : 0;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
json_escape => $json_escape,
key_string => $key_string,
}});
my $out_string = "";
my $key_string = defined $parameter->{key_string} ? $parameter->{key_string} : 0;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { key_string => $key_string }});
# There might be multiple keys, split by newlines.
foreach my $message (split/\n/, $key_string)
@ -337,15 +330,6 @@ sub parse_banged_string
}
}
if ($json_escape)
{
# Escape characters needed for use in json.
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { ">> out_string" => $out_string }});
$out_string =~ s/\"/\\\"/msg;
$out_string =~ s/\n/<br \/>/msg;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "<< out_string" => $out_string }});
}
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { out_string => $out_string }});
return($out_string);
}

@ -470,11 +470,7 @@ Here we will inject 't_0006', which injects 't_0001' which has a variable: [#!st
<key name="job_0001">Configure Network</key>
<key name="job_0002">The network configuration will be updated based on the variables stored in the database. Reconnecting to the machine using the new IP address may be required.</key>
<key name="job_0003">Update Striker</key>
<key name="job_0004">
This "system" is now scheduled to be updated.
Here's a "multi" quoted "multi" line.
OK, go!
</key>
<key name="job_0004">This system is now scheduled to be updated.</key>
<!-- Warnings -->
<key name="striker_warning_0001">The IP address will change. You will need to reconnect after applying these changes.</key>

@ -16,6 +16,7 @@ use strict;
use warnings;
use Anvil::Tools;
use Proc::Simple;
use JSON;
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
@ -54,10 +55,6 @@ if (not $anvil->data->{sys}{database}{connections})
}
}
my $say_description = $anvil->Words->parse_banged_string({json_escape => 1, key_string => "job_0004"});
print "say_description: [".$say_description."]\n";
die;
# Read switches
$anvil->data->{switches}{'run-once'} = "";
$anvil->data->{switches}{'main-loop-only'} = "";
@ -282,9 +279,9 @@ sub run_jobs
}});
# Convert the double-banged strings into a proper message.
my $say_title = $job_title ? $anvil->Words->parse_banged_string({debug => 2, json_escape => 1, key_string => $job_title}) : "";
my $say_description = $job_description ? $anvil->Words->parse_banged_string({debug => 2, json_escape => 1, key_string => $job_description}) : "";
my $say_status = $job_progress ? $anvil->Words->parse_banged_string({debug => 2, json_escape => 1, key_string => $job_status}) : "";
my $say_title = $job_title ? $anvil->Words->parse_banged_string({key_string => $job_title}) : "";
my $say_description = $job_description ? $anvil->Words->parse_banged_string({key_string => $job_description}) : "";
my $say_status = $job_progress ? $anvil->Words->parse_banged_string({key_string => $job_status}) : "";
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
job_title => $job_title,
say_description => $say_description,
@ -292,18 +289,22 @@ sub run_jobs
}});
# Add this to the jobs.json file
$jobs_file .= "{ \"job_uuid\":\"".$job_uuid."\",
\"job_command\":\"".$job_command."\",
\"job_data\":\"".$job_data."\",
\"job_picked_up_at\":\"".$job_picked_up_at."\",
\"job_updated\":\"".$job_updated."\",
\"job_name\":\"".$job_name."\",
\"job_progress\":\"".$job_progress."\",
\"job_title\":\"".$say_title."\",
\"job_description\":\"".$say_description."\",
\"job_status\":\"".$say_status."\",
\"started_seconds_ago\":\"".$started_seconds_ago."\",
\"updated_seconds_ago\":\"".$updated_seconds_ago."\" }, \n";
my $json_string = to_json ({
job_uuid => $job_uuid,
job_command => $job_command,
job_data => $job_data,
job_picked_up_at => $job_picked_up_at,
job_updated => $job_updated,
job_name => $job_name,
job_progress => $job_progress,
job_title => $say_title,
job_description => $say_description,
job_status => $say_status,
started_seconds_ago => $started_seconds_ago,
updated_seconds_ago => $updated_seconds_ago,
});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { json_string => $json_string }});
$jobs_file .= $json_string."\n";
# If the job is done, move on.
next if $job_progress eq "100";

Loading…
Cancel
Save