/** \file
 *
 *  Contains the CycleStarter class implementation.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#include "CycleStarter.h"

#include "data/ConfigDataElement.h"
#include "data/UniversalDataWriter.h"
#include "logger/EventEntry.h"

#include <stdlib.h>

// EventEntry CycleStarter::CycleStartEntry_( NULL, NULL, EventEntry::START_CYCLE );

Timestamp CycleStarter::CycleStartTime_( Timestamp::NOT_SET_TIME );

const Str CycleStarter::NAME( "CycleStarter" );
const DataURI CycleStarter::LOAD_AVG( NAME, "loadAvg1Min", Units::PERCENT );

int CycleStarter::Cycle_( -1 );

CycleStarter::CycleStarter()
    : SyncStarterComponent( "CycleStarter", NULL )
{
    timeWriter_ = newUniversalWriter( UniversalURI::TIME, Units::SECOND, 1.0,
                                      Logger::TIME_PRECISION_MICROS );
    //loadAvgWriter_ = newDataWriter( LOAD_AVG );
}

CycleStarter::~CycleStarter()
{}

void CycleStarter::run()
{
    ++Cycle_;
    CycleStartTime_ = Timestamp::Now();
    //CycleStartEntry_.setTimestamp( CycleStartTime_ );
    // logger_.log( &CycleStartEntry_ );
    EventEntry* cycleStartEntry = new EventEntry( NULL, NULL, EventEntry::START_CYCLE );
    cycleStartEntry->setTimestamp( CycleStartTime_ );
    logger_.log( cycleStartEntry );
    timeWriter_->write( Units::SECOND, CycleStartTime_.asDouble(), CycleStartTime_ );
    //double loadAvg;
    //getloadavg( &loadAvg, 1 );
    //loadAvgWriter_->write( Units::RATIO, loadAvg );
    ConfigDataElement::ApplyConfigValues( timeOfLastRun_ );
}

//EventEntry const* CycleStarter::GetCycleStartEntry()
//{
//    return & CycleStartEntry_;
//}
