Example #1
0
/*----------------------------------------------------------------------------*/
void logMsg(int priority, int sockfd, char* message, size_t length) {
    static char strTime[45];
    time_t now;
    struct tm * localTime;
    char *priorityString;
    /** Allow logging before log_open() called */
    if(0 == logFileDescriptor)
    {
      logFileDescriptor = stderr;
    }
    switch(priority) {
        case 0:
            priorityString = "INFO";
            break;
        case 1:
            priorityString = "WARN";
            break;
        default:
            priorityString = "ERROR";
    };
    now = time(NULL);
    localTime = localtime(&now);
    strftime(strTime, 45, "%c", localTime);
    message[length] = 0;
    if(0 > sockfd)
    {
        fprintf(logFileDescriptor,
                " [%30s] %5s - %50s\n", strTime, priorityString, message);
    }
    else
    {
        struct sockaddr addr;
        socklen_t addrLength = sizeof(addr);
        memset(&addr, addrLength, 0);
        if(0 != getpeername(sockfd, &addr, &addrLength))
        {
            fprintf(logFileDescriptor,
                    " [%30s] %5s - %50s\n", strTime, priorityString, message);
            return;
        }
        fprintf(logFileDescriptor,
                " [%30s] %5s - %50s - %50s\n",
                strTime, priorityString,
                message, sockaddrToString(&addr));
    }
}
status_t CommonTimeServer::dumpConfigInterface(int fd,
                                               const Vector<String16>& /* args */) {
    AutoMutex _lock(&mLock);
    const size_t SIZE = 256;
    char buffer[SIZE];

    if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
        snprintf(buffer, SIZE, "Permission Denial: "
                 "can't dump CommonTimeConfigService from pid=%d, uid=%d\n",
                 IPCThreadState::self()->getCallingPid(),
                 IPCThreadState::self()->getCallingUid());
        write(fd, buffer, strlen(buffer));
    } else {
        char meStr[64];

        sockaddrToString(mMasterElectionEP, true, meStr, sizeof(meStr));

        dump_printf("Common Time Config Service Status\n"
                    "Bound Interface           : %s\n",
                    mBindIfaceValid ? mBindIface.string() : "<unbound>");
        dump_printf("Master Election Endpoint  : %s\n", meStr);
        dump_printf("Master Election Group ID  : %016" PRIu64 "\n", mSyncGroupID);
        dump_printf("Master Announce Interval  : %d mSec\n",
                    mMasterAnnounceIntervalMs);
        dump_printf("Client Sync Interval      : %d mSec\n",
                    mSyncRequestIntervalMs);
        dump_printf("Panic Threshold           : %d uSec\n",
                    mPanicThresholdUsec);
        dump_printf("Base ME Prio              : 0x%02x\n",
                    static_cast<uint32_t>(mMasterPriority));
        dump_printf("Effective ME Prio         : 0x%02x\n",
                    static_cast<uint32_t>(effectivePriority()));
        dump_printf("Auto Disable Allowed      : %s\n",
                    mAutoDisable ? "yes" : "no");
        dump_printf("Auto Disable Engaged      : %s\n",
                    shouldAutoDisable() ? "yes" : "no");
    }

    return NO_ERROR;
}
status_t CommonTimeServer::dumpClockInterface(int fd,
                                              const Vector<String16>& /* args */,
                                              size_t activeClients) {
    AutoMutex _lock(&mLock);
    const size_t SIZE = 256;
    char buffer[SIZE];

    if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
        snprintf(buffer, SIZE, "Permission Denial: "
                 "can't dump CommonClockService from pid=%d, uid=%d\n",
                 IPCThreadState::self()->getCallingPid(),
                 IPCThreadState::self()->getCallingUid());
        write(fd, buffer, strlen(buffer));
    } else {
        int64_t commonTime;
        int64_t localTime;
        bool    synced;
        char maStr[64];

        localTime  = mLocalClock.getLocalTime();
        synced     = (OK == mCommonClock.localToCommon(localTime, &commonTime));
        sockaddrToString(mMasterEP, mMasterEPValid, maStr, sizeof(maStr));

        dump_printf("Common Clock Service Status\nLocal time     : %" PRId64 "\n",
                    localTime);

        if (synced)
            dump_printf("Common time    : %" PRId64 "\n", commonTime);
        else
            dump_printf("Common time    : %s\n", "not synced");

        dump_printf("Timeline ID    : %016" PRIu64 "\n", mTimelineID);
        dump_printf("State          : %s\n", stateToString(mState));
        dump_printf("Master Addr    : %s\n", maStr);


        if (synced) {
            int32_t est = (ICommonClock::STATE_MASTER != mState)
                        ? mClockRecovery.getLastErrorEstimate()
                        : 0;
            dump_printf("Error Est.     : %.3f msec\n",
                        static_cast<float>(est) / 1000.0);
        } else {
            dump_printf("Error Est.     : %s\n", "unknown");
        }

        dump_printf("Syncs TXes     : %u\n", mClient_SyncsSentToCurMaster);
        dump_printf("Syncs RXes     : %u (%.2f%%)\n",
                    mClient_SyncRespsRXedFromCurMaster,
                    checked_percentage(
                        mClient_SyncRespsRXedFromCurMaster,
                        mClient_SyncsSentToCurMaster));
        dump_printf("RXs Expired    : %u (%.2f%%)\n",
                    mClient_ExpiredSyncRespsRXedFromCurMaster,
                    checked_percentage(
                        mClient_ExpiredSyncRespsRXedFromCurMaster,
                        mClient_SyncsSentToCurMaster));

        if (!mClient_LastGoodSyncRX) {
            dump_printf("Last Good RX   : %s\n", "unknown");
        } else {
            int64_t localDelta, usecDelta;
            localDelta = localTime - mClient_LastGoodSyncRX;
            usecDelta  = mCommonClock.localDurationToCommonDuration(localDelta);
            dump_printf("Last Good RX   : %" PRId64 " uSec ago\n", usecDelta);
        }

        dump_printf("Active Clients : %zu\n", activeClients);
        mClient_PacketRTTLog.dumpLog(fd, mCommonClock);
        mStateChangeLog.dumpLog(fd);
        mElectionLog.dumpLog(fd);
        mBadPktLog.dumpLog(fd);
    }

    return NO_ERROR;
}