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:
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;