pricecharts

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

commit 056548a8e5c2c671131a370e5bdd351131fe02a8
parent fbc79bba44baea23551a5afb6c1c2a8ffc294342
Author: Kyle Milz <kyle@getaddrinfo.net>
Date:   Sat,  8 Nov 2014 15:18:36 -0700

search: first cut at making this a deamon

Diffstat:
Msearch.pl | 59++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 54 insertions(+), 5 deletions(-)

diff --git a/search.pl b/search.pl @@ -5,33 +5,75 @@ use warnings; use FCGI; use Template; +use Proc::Daemon; use shared; +print "disconnecting dbh\n"; +$dbh->disconnect(); + +my $pid_file = "$cfg->{general}{var}/run/pricegraph_search.pid"; + +if (-e $pid_file) { + print "pid file $pid_file exists, search may already be running\n"; + print "make sure that search is not running and remove\n"; + exit +} + +print "daemonizing\n"; + +my $daemon = Proc::Daemon->new( + work_dir => "/home/kyle/src/pricegraph", + child_STDOUT => "log/search.txt", + child_STDERR => "log/search.txt", + pid_file => $pid_file +); + +$daemon->Init(); + +$SIG{INT} = \&sig_handler; +$SIG{TERM} = \&sig_handler; + +print "assigned sig handlers\n"; mkdir "$cfg->{general}{var}/www/run"; my $socket_path = "$cfg->{general}{var}/www/run/search.sock"; +print "made run dir\n"; + my $socket = FCGI::OpenSocket($socket_path, 1024); my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket, FCGI::FAIL_ACCEPT_ON_INTR); +print "made socket and request objects\n"; + chmod 0777, $socket_path; -sub sigint -{ - $request->LastCall(); -} -$SIG{INT} = \&sigint; + +print "chmod 0777\n"; my $config = { INCLUDE_PATH => "html" }; my $template = Template->new($config); +print "made new template config\n"; + +my $db_dir = "$cfg->{general}{var}/db"; +my $dbh = DBI->connect( + "dbi:SQLite:dbname=$db_dir/pricechart.db", + "", + "", + { RaiseError => 1 } +) or die $DBI::errstr; + +print "opened db\n"; + my $sql = "select part_num, manufacturer, description from products " . "where description like ? or part_num like ? or manufacturer like ?"; my $search_sth = $dbh->prepare($sql); +print "about to start main loop\n"; + while ($request->Accept() >= 0) { print "Content-Type: text/html\r\n\r\n"; @@ -57,4 +99,11 @@ while ($request->Accept() >= 0) { } FCGI::CloseSocket($socket); +unlink($socket_path, $pid_file); $dbh->disconnect(); + +sub sig_handler +{ + $request->LastCall(); + print "caught signal\n"; +}