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}