package com.linkedin.databus2.producers.db;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
import java.util.Collections;
import java.util.Formatter;
import java.util.List;
public class ReadEventCycleSummary
{
private final List<EventReaderSummary> _sourceSummaries;
private final long _endOfWindowScn;
private final int _totalEventNum;
/** overall time taken to query,retrieve and insert data from the db to the event buffer */
private final long _readMillis;
/** time taken to enter retrieved data into the buffer, includes serialization and insertion */
private long _eventMillis;
private final String _eventSourceName;
/** total size of serialized payload across sources */
private long _sizeInBytes;
/** the size of time window in ms, of this batch ( _numberOfEvents) as seen by the database ,across sources */
private long _elapsedTimeMillis;
/** time taken by jdbc 'execute query' */
private long _queryTimeMillis;
public String getEventSourceName()
{
return _eventSourceName;
}
public long getReadMillis()
{
return _readMillis;
}
public int getTotalEventNum()
{
return _totalEventNum;
}
public long getEventMillis()
{
return _eventMillis;
}
public long getElapsedTimeMillis()
{
return _elapsedTimeMillis;
}
public long getQueryTimeMillis()
{
return _queryTimeMillis;
}
public List<EventReaderSummary> getSourceSummaries()
{
return _sourceSummaries;
}
public long getEndOfWindowScn()
{
return _endOfWindowScn;
}
public long getTotalEventSizeInBytes()
{
return _sizeInBytes;
}
public ReadEventCycleSummary(String eventSourceName,
List<EventReaderSummary> sourceSummaries,
long endOfWindowScn,
long readMillis)
{
_eventSourceName = eventSourceName;
_sourceSummaries = Collections.unmodifiableList(sourceSummaries);
_endOfWindowScn = endOfWindowScn;
_readMillis = readMillis;
long minTimeProdStart = Long.MAX_VALUE;
long maxTimeProdEnd = 0;
long queryTimeMillis = 0;
int sum = 0; long evSerMillis = 0; long size=0;
for(EventReaderSummary sourceSummary : _sourceSummaries)
{
sum += sourceSummary.getNumberOfEvents();
evSerMillis += sourceSummary.getEventMillis();
size += sourceSummary.getSizeOfSerializedEvents();
maxTimeProdEnd = Math.max(maxTimeProdEnd, sourceSummary.getTimeProdEnd());
minTimeProdStart = Math.min(minTimeProdStart, sourceSummary.getTimeProdStart());
queryTimeMillis += sourceSummary.getQueryExecTime();
}
_elapsedTimeMillis = maxTimeProdEnd - minTimeProdStart;
_totalEventNum = sum;
_eventMillis = evSerMillis;
_sizeInBytes = size;
_queryTimeMillis = queryTimeMillis;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder(256);
Formatter fmt = new Formatter(sb);
double prodRate = _elapsedTimeMillis == 0 ? 0 : (double) _sizeInBytes/_elapsedTimeMillis;
double consRate = _readMillis == 0 ? 0 : (double) _sizeInBytes/ _readMillis;
fmt.format(EventReaderSummary.EVENT_LOG_FORMAT, _eventSourceName, 0, _sourceSummaries.size(),
_totalEventNum, _endOfWindowScn, _readMillis, _sizeInBytes, _eventMillis, _elapsedTimeMillis, _queryTimeMillis,prodRate,consRate);
fmt.flush();
return fmt.toString();
}
}