001package ca.bc.webarts.tools.mythtv; 002 003import java.io.File; 004import java.util.ArrayList; 005import java.util.List; 006 007import com.dpillay.tools.tail4j.characters.StringTailedFileReader; 008import com.dpillay.tools.tail4j.configuration.TailConfiguration; 009import com.dpillay.tools.tail4j.core.PrintWriterTailPrinter; 010import com.dpillay.tools.tail4j.core.TailExecutor; 011import com.dpillay.tools.tail4j.core.TailListener; 012import com.dpillay.tools.tail4j.core.TailPrinter; 013import com.dpillay.tools.tail4j.core.TailedReader; 014 015/** 016 * Main class that launches the MythTV tailer watchdog. 017 * 018 * @author tgutwin 019 * 020 */ 021public class MythTVWatchdog 022{ 023 private static String logFilename = "/var/log/mythtv/mythbackend.log"; 024 private static String syslogFilename = "/var/log/syslog"; 025 026 public static void main(String[] args) 027 { 028 // check if the arguments are sane 029 try 030 { 031 argumentSanityChecker(args); 032 } 033 catch (RuntimeException re) 034 { 035 if (re.getMessage() != null) 036 { 037 System.out.println("Error: " + re.getMessage()); 038 System.out.println(); 039 } 040 usage(); 041 return; 042 } 043 044 // if help is requested, show the usage. 045 //if (isUsage(args)) 046 //{ 047 // usage(); 048 // return; 049 // } 050 051 // continue with tail 052 TailConfiguration tc = MythTVWatchdog.build(args); 053 if (tc == null) 054 return; 055 List<TailedReader<String, File>> tailedFiles = new ArrayList<TailedReader<String, File>>(); 056 TailListener<String> tailListener = new TailListener<String>(); 057 for (String filePath : tc.getFiles()) 058 { 059 File file = new File(filePath); 060 TailedReader<String, File> tailedFile = new StringTailedFileReader(tc, file, tailListener); 061 tailedFiles.add(tailedFile); 062 } 063 TailDoer<String> reseter = new TailDoerTailReseter<String>( tailListener); 064 MythTVTailExecutor executor = new MythTVTailExecutor(); 065 executor.execute(tailedFiles, reseter); 066 } 067 068 private static void usage() 069 { 070 System.out.println("MythTVWatchdog - (c) Tom Gutwin"); 071 System.out.println("Usage: java ca.bc.webarts.tools.mythtv.MythTVWatchdog [mythbackendLogFilename]"); 072 System.out.println("\tmythbackendLogFilename\t\toptional path to logfile."); 073 System.out.println("\t--help\t\tThis help section."); 074 } 075 076 private static void argumentSanityChecker(String[] args) 077 { 078 if (args.length >1) 079 throw new RuntimeException(); 080 081 if (args.length == 1) 082 { 083 logFilename = args[0]; 084 // check args here 085 } 086 } 087 088 public static TailConfiguration build(String[] args) 089 { 090 TailConfiguration tc = new TailConfiguration(); 091 tc.setForce(true); // follow the end of the log 092 tc.setShowLines(20); 093 tc.getFiles().add(logFilename); 094 return tc; 095 } 096}