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:
M | search.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";
+}