use HTTP::Request;
use IO::File;
use POSIX;
-use LWP::UserAgent;
use XML::Parser;
use Commods;
# $commod{'Hemp'}{Hold}
our @v;
-our ($commod,$stall,%commod);
+our ($commod,$stall,%commod,@commods_inorder);
@ARGV==1 or die "You probably don't want to run this program directly.\n";
our ($mode) = shift @ARGV;
return if @v <= $c;
my ($price,$qty) = @v[$c..$c+1];
return if !length($price) && !length($qty);
+ die "$price ?" unless $price =~ m/^\d/;
die "$_ ?" unless length($price) && length($qty);
$commod{$commod}{$bs}{$stall}= {
Stall => $stall,
chomp;
@v= split /\t/;
#print STDERR "[".join("|",@v)."]\n";
+ foreach (@v[2..$#v]) {
+ s/\,//g;
+ die "$_ ?" if m/.\D/;
+ }
($commod,$stall) = @v;
+ push @commods_inorder, $commod unless exists $commod{$commod};
bs_read(Buy, 2);
bs_read(Sell, 4);
$commod{$commod}{Hold}= $v[6]+0 if @v>6;
$info.=
sprintf("%-13.13s| %-19.19s %4d| %-19.19s %4d|%3d x%3d =%3d\n",
$commod,
- $buys[0]{Stall},$buys[0]{Price},
$sells[0]{Stall},$sells[0]{Price},
+ $buys[0]{Stall},$buys[0]{Price},
$qty, $pricediff, $tprofit);
sub arb_subtract_qty (\@) {
my ($verbs) = @_;
}
}
-sub write_tsv ($) {
- my ($f) = @_;
+sub write_tsv ($$) {
+ my ($f,$showhold) = @_;
foreach $commod (sort keys %commod) {
$current= $commod{$commod};
my %stalls;
printf($f "%s\t%s", $commod, $stall) or die $!;
bs_p_tsv($f, Buy);
bs_p_tsv($f, Sell);
+ if ($showhold && $commod{$commod}{Hold}) {
+ printf($f "\t%s", $commod{$commod}{Hold}) or die $!;
+ }
print($f "\n") or die $!;
}
}
}
sub main__tsv () {
- write_tsv(\*STDOUT);
+ write_tsv(\*STDOUT,1);
+}
+
+sub undef_printable { my ($ov)= @_; defined $ov ? $ov : '?'; };
+
+sub commodsinorder_print1 ($$) {
+ my ($keyword,$commod) = @_;
+ printf("%s\t%-40s %10s %s",
+ $keyword,
+ $commod,
+ undef_printable($commods{$commod}{Ordval}),
+ undef_printable($commods{$commod}{Class}))
+ or die $!;
}
+sub main__commodsinorder () {
+ parse_info_serverside();
+ my $last_ov;
+ foreach my $commod (@commods_inorder) {
+ my $ov= $commods{$commod}{Ordval};
+ commodsinorder_print1('found',$commod);
+ if (defined $ov) {
+ if (defined $last_ov && $ov <= $last_ov) {
+ print " out-of-order" or die $!;
+ }
+ $last_ov= $ov;
+ }
+ print "\n" or die $!;
+ }
+ foreach my $commod (sort {
+ undef_printable($commods{$a}{Ordval}) cmp
+ undef_printable($commods{$b}{Ordval})
+ } keys %commods) {
+ next if exists $commod{$commod};
+ commodsinorder_print1('none',$commod);
+ print "\n" or die $!;
+ }
+}
our ($pctb) = $ENV{'YPPSC_YARRG_PCTB'};
-our ($ua)= LWP::UserAgent->new;
+our ($ua)= http_useragent("commod-results-processor $mode");
sub refresh_commodmap() {
die unless $pctb;
my $content= $resp->content;
# print STDERR "[[[$content]]]\n";
- $xp->parse($content);
+ my $commodmapxmltmp= '_commodmap.xml';
+ if (!eval {
+ $xp->parse($content); 1;
+ }) {
+ open R, ">./$commodmapxmltmp" or die $!;
+ print R $content or die $!;
+ close R or die $!;
+ die "$@ parsing commodmap";
+ }
+ unlink $commodmapxmltmp or $!==&ENOENT or die $!;
close $o or die $!;
rename "_commodmap.tsv.tmp","_commodmap.tsv" or die $!;
}
$o{'timestamp'}= $ENV{'YPPSC_DATA_TIMESTAMP'} or die;
my $tf= pipethrough_prep();
- write_tsv($tf);
+ write_tsv($tf,0);
my $oz= pipethrough_run_gzip($tf);
$o{'data'}= [ undef, 'deduped.tsv.gz',
Content_Type => 'application/octet-stream',