Ticket #8329: 148-setlogfile.patch

File 148-setlogfile.patch, 8.9 KB (added by Bill <billstuff2001@…>, 16 years ago)
  • mythtv/libs/libmyth/mythcommandlineparser.cpp

    old new MythCommandLineParser::MythCommandLinePa  
    2121    parseTypes(things_to_parse),
    2222    display(), geometry(),
    2323    logfile(),
     24    newlogfile(),
    2425    pidfile(),
    2526    infile(),
    2627    outfile(),
    MythCommandLineParser::MythCommandLinePa  
    3738    printsched(false),
    3839    testsched(false),
    3940    setverbose(false),
     41    setlogfile(false),
    4042    resched(false),
    4143    nosched(false),
    4244    noupnp(false),
    bool MythCommandLineParser::Parse(  
    412414        ++argpos;
    413415        return true;
    414416    }
     417    else if ((parseTypes & kCLPSetLogFile) &&
     418             (!strcmp(argv[argpos],"--setlogfile")))
     419    {
     420        setlogfile = true;
     421        if ((argc - 1) > argpos)
     422        {
     423            newlogfile = argv[argpos+1];
     424            if (newlogfile.startsWith("-"))
     425            {
     426                cerr << "Invalid argument to --setlogfile option\n";
     427                err = true;
     428                return true;
     429            }
     430        }
     431        else
     432        {
     433            cerr << "Missing argument to --setlogfile option\n";
     434            err = true;
     435            return true;
     436        }
     437
     438        ++argpos;
     439        return true;
     440    }
    415441    else if ((parseTypes & kCLPPidFile) &&
    416442             (!strcmp(argv[argpos],"-p") ||
    417443              !strcmp(argv[argpos],"--pidfile")))
    QString MythCommandLineParser::GetHelpSt  
    684710            << "Writes STDERR and STDOUT messages to filename" << endl;
    685711    }
    686712
     713    if (parseTypes & kCLPSetLogFile)
     714    {
     715        msg << "--setlogfile filename          "
     716            << "Change running backend to use new logfile" << endl;
     717    }
     718
    687719    if (parseTypes & kCLPPidFile)
    688720    {
    689721        msg << "-p or --pidfile filename       "
  • mythtv/libs/libmyth/mythcommandlineparser.h

    old new typedef enum {  
    4444    kCLPStartTime            = 0x0080000000ULL,
    4545    kCLPPrintExpire          = 0x0100000000ULL,
    4646    kCLPGeneratePreview      = 0x0200000000ULL,
     47    kCLPSetLogFile           = 0x0400000000ULL,
    4748} ParseType;
    4849
    4950class MPUBLIC MythCommandLineParser
    class MPUBLIC MythCommandLineParser  
    6263    QString GetDisplay(void)        const { return display;     }
    6364    QString GetGeometry(void)       const { return geometry;    }
    6465    QString GetLogFilename(void)    const { return logfile;     }
     66    QString GetNewLogFilename(void) const { return newlogfile;  }
    6567    QString GetPIDFilename(void)    const { return pidfile;     }
    6668    QString GetInputFilename(void)  const { return infile;      }
    6769    QString GetOutputFilename(void) const { return outfile;     }
    class MPUBLIC MythCommandLineParser  
    8688    bool IsAutoExpirerEnabled(void) const { return !noexpirer;  }
    8789
    8890    bool SetVerbose(void)           const { return setverbose;  }
     91    bool SetLogFile(void)           const { return setlogfile;  }
    8992    bool Reschedule(void)           const { return resched;     }
    9093    bool ClearSettingsCache(void)   const { return clearsettingscache; }
    9194    bool WantUPnPRebuild(void)      const { return wantupnprebuild; }
    class MPUBLIC MythCommandLineParser  
    101104        return
    102105            !eventString.isEmpty()    || wantupnprebuild       ||
    103106            setverbose                || clearsettingscache    ||
     107            setlogfile                ||
    104108            printsched                || testsched             ||
    105109            resched                   || !printexpire.isEmpty() ||
    106110            (previewFrameNumber >= -1) || (previewSeconds >= -1);
    class MPUBLIC MythCommandLineParser  
    118122    QString               display;
    119123    QString               geometry;
    120124    QString               logfile;
     125    QString               newlogfile;
    121126    QString               pidfile;
    122127    QString               infile;
    123128    QString               outfile;
    class MPUBLIC MythCommandLineParser  
    137142    bool                  printsched;
    138143    bool                  testsched;
    139144    bool                  setverbose;
     145    bool                  setlogfile;
    140146    bool                  resched;
    141147    bool                  nosched;
    142148    bool                  noupnp;
  • mythtv/programs/mythbackend/main.cpp

    old new int main(int argc, char **argv)  
    105105        kCLPChannelId            |
    106106        kCLPStartTime            |
    107107        kCLPPrintExpire          |
    108         kCLPGeneratePreview);
     108        kCLPGeneratePreview      |
     109        kCLPSetLogFile);
    109110
    110111    for (int argpos = 0; argpos < argc; ++argpos)
    111112    {
  • mythtv/programs/mythbackend/main_helpers.cpp

    old new int handle_command(const MythCommandLine  
    536536        }
    537537    }
    538538
     539    if (cmdline.SetLogFile())
     540    {
     541        if (gContext->ConnectToMasterServer())
     542        {
     543            QString message = "SET_LOGFILE ";
     544            message += cmdline.GetNewLogFilename();
     545
     546            RemoteSendMessage(message);
     547            VERBOSE(VB_IMPORTANT, QString("Sent '%1' message").arg(message));
     548            return BACKEND_EXIT_OK;
     549        }
     550        else
     551        {
     552            VERBOSE(VB_IMPORTANT,
     553                    "Unable to connect to backend, logfile unchanged ");
     554            return BACKEND_EXIT_NO_CONNECT;
     555        }
     556    }
     557
    539558    if (cmdline.ClearSettingsCache())
    540559    {
    541560        if (gContext->ConnectToMasterServer())
  • mythtv/programs/mythbackend/mainserver.cpp

    old new void MainServer::ProcessRequestWork(Myth  
    559559    {
    560560        if ((listline.size() >= 2) && (listline[1].left(11) == "SET_VERBOSE"))
    561561            HandleSetVerbose(listline, pbs);
     562        else if ((listline.size() >= 2) && (listline[1].left(11) == "SET_LOGFILE"))
     563            HandleSetLogfile(listline, pbs);
    562564        else
    563565            HandleMessage(listline, pbs);
    564566    }
    void MainServer::HandleSetVerbose(QStrin  
    43904392    SendResponse(pbssock, retlist);
    43914393}
    43924394
     4395void MainServer::HandleSetLogfile(QStringList &slist, PlaybackSock *pbs)
     4396{
     4397    MythSocket *pbssock = pbs->getSocket();
     4398    QStringList retlist = QStringList("OK");
     4399
     4400    QString newlogfile = slist[1];
     4401    int len=newlogfile.length();
     4402    if (len > 12)
     4403    {
     4404        newlogfile = newlogfile.right(len-12); // Chop off "SET_LOGFILE "
     4405
     4406        // Duplicate of log_rotate in main.cpp
     4407        VERBOSE(VB_GENERAL, QString("Setting new logfile to '%1'").arg(newlogfile));
     4408
     4409        int new_logfd = open(newlogfile.toLocal8Bit().constData(),
     4410                             O_WRONLY|O_CREAT|O_APPEND|O_SYNC, 0664);
     4411        if (new_logfd < 0)
     4412        {
     4413            VERBOSE(VB_IMPORTANT, QString("Couldn't open new logfile '%1'").arg(newlogfile));
     4414            retlist = QStringList("Failed");
     4415        }
     4416        else
     4417        {
     4418            while (dup2(new_logfd, 1) < 0 && errno == EINTR) ;
     4419            while (dup2(new_logfd, 2) < 0 && errno == EINTR) ;
     4420            while (close(new_logfd) < 0 && errno == EINTR) ;
     4421            VERBOSE(VB_GENERAL, QString("New Logfile: '%1'").arg(newlogfile));
     4422        }
     4423    }
     4424    else
     4425    {
     4426        VERBOSE(VB_IMPORTANT, QString("Invalid SET_LOGFILE string: '%1'").arg(newlogfile));
     4427        retlist = QStringList("Failed");
     4428    }
     4429
     4430    SendResponse(pbssock, retlist);
     4431}
     4432
     4433
    43934434void MainServer::HandleIsRecording(QStringList &slist, PlaybackSock *pbs)
    43944435{
    43954436    (void)slist;
  • mythtv/programs/mythbackend/mainserver.h

    old new class MainServer : public QObject, publi  
    127127    void HandleGetRecorderFromNum(QStringList &slist, PlaybackSock *pbs);
    128128    void HandleMessage(QStringList &slist, PlaybackSock *pbs);
    129129    void HandleSetVerbose(QStringList &slist, PlaybackSock *pbs);
     130    void HandleSetLogfile(QStringList &slist, PlaybackSock *pbs);
    130131    void HandleGenPreviewPixmap(QStringList &slist, PlaybackSock *pbs);
    131132    void HandlePixmapLastModified(QStringList &slist, PlaybackSock *pbs);
    132133    void HandlePixmapGetIfModified(const QStringList &slist, PlaybackSock *pbs);