pricecharts

track prices of consumer electronics
Log | Files | Refs | README

commit e52f11b3c209d5efeefab77342fe2f969b2a9054
parent acf68b1568162bb945f4b7d1a6758c08c6850db4
Author: Kyle Milz <kyle@getaddrinfo.net>
Date:   Wed, 29 Apr 2015 19:41:10 -0600

first steps at a saner filesystem layout

- change /var/www/db to /var/db
- config entry logs changed to log_dir
- db_dir is now in general config section

Diffstat:
MMakefile | 12++++++++----
MPriceChart.pm | 15+++++++--------
Mpc_html | 4++--
Mprice_scraper | 6+++---
Mpricechart.cfg | 11++++-------
Mproduct_scraper | 4++--
Mps_fcgi | 11++++++-----
7 files changed, 32 insertions(+), 31 deletions(-)

diff --git a/Makefile b/Makefile @@ -1,6 +1,9 @@ USR ?= /usr/local VAR ?= /var +USER = kyle +GROUP = wheel + USR_BIN = $(USR)/bin PERL_LIBDATA = $(USR)/libdata/perl5/site_perl HTDOCS = $(VAR)/www/htdocs @@ -14,16 +17,17 @@ HTML = tt logo pricechart.css install: cp $(BINS) $(USR_BIN)/ cp $(LIBS) $(PERL_LIBDATA)/ + mkdir -p $(VAR)/db/pricesloth + chown $(USER):$(GROUP) $(VAR)/db/pricesloth sed -e "s@$(DEV_BIN)@$(USR_BIN)@" < openbsd_rc.d_ps_fcgi \ > /etc/rc.d/ps_fcgi chmod 555 /etc/rc.d/ps_fcgi cp pricechart.cfg /etc/ - mkdir -p $(HTDOCS)/pricechart - mkdir -p $(HTDOCS)/pricechart/svg - cp -R $(HTML) $(HTDOCS)/pricechart/ - chown -R www:daemon $(HTDOCS)/pricechart + mkdir -p $(HTDOCS)/pricesloth + cp -R $(HTML) $(HTDOCS)/pricesloth/ + chown -R $(USER):$(GROUP) $(HTDOCS)/pricesloth uninstall: # rm /etc/rc.d/ps_fcgi diff --git a/PriceChart.pm b/PriceChart.pm @@ -18,7 +18,9 @@ sub get_config "email", "smtp", # XXX: add simple regex validation here - "addrs" + "addrs", + "db_dir", + "log_dir", ], }, http => { @@ -27,9 +29,7 @@ sub get_config "uid", "gid", "chroot", - "db_dir", "htdocs", - "logs", ], }, retailers => { @@ -54,17 +54,16 @@ sub get_config sub get_dbh { - my $cfg = shift; - my $db_dir = shift || $cfg->{"chroot"} . $cfg->{"db_dir"}; + my $db_dir = shift; my $verbose = shift || undef; make_path($db_dir, { verbose => $verbose }); - print "info: get_dbh: opening $db_dir/pricechart.db\n" if ($verbose); + print "info: get_dbh: opening $db_dir/db\n" if ($verbose); my $dbh = DBI->connect( - "dbi:SQLite:dbname=$db_dir/pricechart.db", + "dbi:SQLite:dbname=$db_dir/db", "", "", - {RaiseError => 1} + { RaiseError => 1 } ) or die $DBI::errstr; return $dbh; diff --git a/pc_html b/pc_html @@ -18,9 +18,9 @@ getopts("av", \%args); $| = 1 if ($args{v}); my $cfg = get_config(); -my $dbh = get_dbh($cfg->{http}, undef, $args{v}); +my $dbh = get_dbh($cfg->{general}{db_dir}, $args{v}); -my $work_dir = $cfg->{http}{chroot} . $cfg->{http}{htdocs}; +my $work_dir = $cfg->{http}{htdocs}; my $svg_dir = $work_dir . "/svg"; print "info: work, svg dirs $work_dir\{,svg\}\n" if ($args{v}); diff --git a/price_scraper b/price_scraper @@ -21,10 +21,10 @@ getopts("nv", \%args); $| = 1 if ($args{v}); my $cfg = get_config(); -my $ua = new_ua($cfg->{"general"}, $args{v}); -my $dbh = get_dbh($cfg->{"http"}, undef, $args{v}); +my $ua = new_ua($cfg->{general}, $args{v}); +my $dbh = get_dbh($cfg->{general}{db_dir}, $args{v}); -my $log_path = $cfg->{"http"}{"chroot"} . $cfg->{"http"}{"logs"} . "/price_scrapes.txt"; +my $log_path = $cfg->{general}{log_dir} . "/pricesloth"; my $log = get_log($log_path, $args{v}); # allow products to go out of stock. if we haven't seen them for > 30 days diff --git a/pricechart.cfg b/pricechart.cfg @@ -5,18 +5,15 @@ agent = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Geck email = kyle@getaddrinfo.net smtp = smtp.getaddrinfo.net addrs = 216.171.227.98 216.171.227.100 - +db_dir = /var/db/pricesloth +log_dir = /var/log *** http *** uid = www gid = daemon chroot = /var/www - -# everything below is relative to chroot -socket = /run/search.sock -db_dir = /db -htdocs = /htdocs/pricechart -logs = /logs +htdocs = /var/www/htdocs/pricesloth +socket = /var/www/run/search.sock *** retailers *** diff --git a/product_scraper b/product_scraper @@ -21,8 +21,8 @@ getopts("tv", \%args); $| = 1 if ($args{v}); my $cfg = get_config(); -my $ua = new_ua($cfg->{"general"}, $args{v}); -my $dbh = get_dbh($cfg->{"http"}, undef, $args{v}); +my $ua = new_ua($cfg->{general}, $args{v}); +my $dbh = get_dbh($cfg->{general}{db_dir}, $args{v}); my $tmp_file = "/tmp/product_scraper.txt"; my $log = get_log($tmp_file, $args{v}); srand; diff --git a/ps_fcgi b/ps_fcgi @@ -32,7 +32,7 @@ unless ($args{v}) { } my $cfg = get_config(); -my %http_cfg = %{$cfg->{"http"}}; +my %http_cfg = %{$cfg->{http}}; openlog("ps_fcgi", LOG_PID, LOG_DAEMON); @@ -47,7 +47,8 @@ my $socket = FCGI::OpenSocket($http_cfg{socket}, 1024); my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket, FCGI::FAIL_ACCEPT_ON_INTR); -my $dbh = get_dbh($cfg->{http}, $http_cfg{db_dir}); +# XXX: sqlite_open_flags => DBD::SQLite::OPEN_READONLY +my $dbh = get_dbh($cfg->{general}{db_dir}, $args{v}); my $sql = qq{select distinct manufacturer, part_num from prices where manufacturer like ? or part_num like ?}; my $srch_sth = $dbh->prepare($sql); @@ -57,6 +58,9 @@ my $uid = getpwnam($user) or die "error: user $user does not exist\n"; my $gid = getgrnam($group) or die "error: group $group does not exist\n"; chown $uid, $gid, $http_cfg{socket} or die "error: chown $uid:$gid: $!"; +my $config = { INCLUDE_PATH => "$http_cfg{htdocs}/tt" }; +my $template = Template->new($config) || die $Template::ERROR . "\n"; + if (fork()) { # parent $0 = "ps_fcgi [priv]"; @@ -90,9 +94,6 @@ $( = $) = "$gid $gid"; $< = $> = $uid; print "info: child: uid:gid appears to be $<:$(\n" if ($args{v}); -my $config = { INCLUDE_PATH => "$http_cfg{htdocs}/tt" }; -my $template = Template->new($config) || die $Template::ERROR . "\n"; - # intercept signals to shut down cleanly $SIG{INT} = \&child_sig; $SIG{TERM} = \&child_sig;