65,186
社区成员




/*
* 保存元数据
* 魔幻数|主版本号|小版本号|总请求数|请求1,请求2,请求3,....
*/
protected function saveMeta()
{
self::ensureDir(self::getDefaultSaveDir());
$metaFile = self::getMetaFile();
$lastItemCount = 0;
if (file_exists($metaFile)) {
$hFile = BinaryWriter::open($metaFile);
if ($hFile) {
$lastItemCount = $this->getMetaItemCount($hFile);
}
$szItem = self::getItemLength();
$posOffset = self::getLastLogFilePos($hFile);
if ($szItem) {
$this->saveMetaItemCount($hFile,1+$lastItemCount);
$this->saveMetaOneItem($hFile,$posOffset+1,$szItem+$posOffset);
}
BinaryWriter::close($hFile);
self::$last_flush_begin = $posOffset+1;
self::$last_flush_end = $szItem+$posOffset;
self::$last_flush_bytes = $szItem;
}else{
$hFile = BinaryWriter::open($metaFile);
$szItem = self::getItemLength()-1;
$this->saveHeader($hFile);
$this->saveMetaItemCount($hFile,1);
$this->saveMetaOneItem($hFile,0,$szItem);
BinaryWriter::close($hFile);
self::$last_flush_begin = 0;
self::$last_flush_end = $szItem;
self::$last_flush_bytes = $szItem+1;
}
}
/*
* @func 读取保存的日志信息
*/
public function decode($page_offset,$page_size=20,$asc=false,$date = ''){
if($page_size <1){
return [];
}
// 解析meta二进制文件
$metaFile = $this->getMetaFile($date);
if(!file_exists($metaFile)){
return [];
}
$hFile = BinaryReader::open($metaFile);
//获取总数目
$totalItems = $this->getMetaItemCount($hFile);
//获取真实数据所在偏移meta信息
$pos = self::calcItemPos($totalItems,$page_offset,$page_size,$asc);
if(is_null($pos)){
return ['total'=>$totalItems,'records'=>[]];
}
$rawMeta = BinaryReader::getRawBytesFromFile($hFile,$pos->offset,$pos->size);
$arrMetaItem = self::decodeMetaItem($rawMeta,$pos->size/8);
BinaryReader::close($hFile);
// 解析data二进制文件
$logFile = $this->getLogFile($date);
$hFile = BinaryReader::open($logFile);
$items = [];
foreach($arrMetaItem as $k=>$v){
if($v['start']<0 || $v['end']<=0){
continue;
}
$items[] = $this->decodeLogData($hFile,$v['start'],$v['end']);
}
BinaryReader::close($hFile);
return ['total'=>$totalItems,'records'=>$items];
}