package org.skywalking.apm.collector.worker.segment.mock;
import org.skywalking.apm.collector.queue.EndOfBatchCommand;
import org.skywalking.apm.collector.worker.AnalysisMember;
import org.skywalking.apm.collector.worker.segment.SegmentPost;
import org.skywalking.apm.collector.worker.segment.entity.Segment;
import org.skywalking.apm.collector.worker.segment.entity.SegmentDeserialize;
import org.skywalking.apm.collector.worker.tools.DateTools;
import org.skywalking.apm.collector.worker.tools.JsonFileReader;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
/**
* @author pengys5
*/
public class SegmentMock {
private String path = this.getClass().getResource("/").getPath();
private final String CacheServiceJsonFile = path + "/json/segment/post/normal/cache-service.json";
private final String PersistenceServiceJsonFile = path + "/json/segment/post/normal/persistence-service.json";
private final String PortalServiceJsonFile = path + "/json/segment/post/normal/portal-service.json";
private final String CacheServiceExceptionJsonFile = path + "/json/segment/post/exception/cache-service.json";
private final String PortalServiceExceptionJsonFile = path + "/json/segment/post/exception/portal-service.json";
private final String SpecialJsonFile = path + "/json/segment/post/special/special.json";
public String loadJsonFile(String fileName) throws FileNotFoundException {
return JsonFileReader.INSTANCE.read(path + fileName);
}
public String mockCacheServiceSegmentAsString() throws FileNotFoundException {
return JsonFileReader.INSTANCE.read(CacheServiceJsonFile);
}
public String mockPersistenceServiceSegmentAsString() throws FileNotFoundException {
return JsonFileReader.INSTANCE.read(PersistenceServiceJsonFile);
}
public String mockPortalServiceSegmentAsString() throws FileNotFoundException {
return JsonFileReader.INSTANCE.read(PortalServiceJsonFile);
}
public List<SegmentPost.SegmentWithTimeSlice> mockCacheServiceExceptionSegmentTimeSlice() throws Exception {
return createSegmentWithTimeSliceList(CacheServiceExceptionJsonFile);
}
public List<SegmentPost.SegmentWithTimeSlice> mockPortalServiceExceptionSegmentTimeSlice() throws Exception {
return createSegmentWithTimeSliceList(PortalServiceExceptionJsonFile);
}
public List<SegmentPost.SegmentWithTimeSlice> mockCacheServiceSegmentSegmentTimeSlice() throws Exception {
return createSegmentWithTimeSliceList(CacheServiceJsonFile);
}
public List<SegmentPost.SegmentWithTimeSlice> mockPersistenceServiceSegmentTimeSlice() throws Exception {
return createSegmentWithTimeSliceList(PersistenceServiceJsonFile);
}
public List<SegmentPost.SegmentWithTimeSlice> mockPortalServiceSegmentSegmentTimeSlice() throws Exception {
return createSegmentWithTimeSliceList(PortalServiceJsonFile);
}
private List<SegmentPost.SegmentWithTimeSlice> createSegmentWithTimeSliceList(String jsonFilePath) throws Exception {
List<Segment> segmentList = SegmentDeserialize.INSTANCE.deserializeMultiple(jsonFilePath);
List<SegmentPost.SegmentWithTimeSlice> segmentWithTimeSliceList = new ArrayList<>();
for (Segment segment : segmentList) {
SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = createSegmentWithTimeSlice(segment);
segmentWithTimeSliceList.add(segmentWithTimeSlice);
}
return segmentWithTimeSliceList;
}
private SegmentPost.SegmentWithTimeSlice createSegmentWithTimeSlice(Segment segment) {
long minuteSlice = DateTools.getMinuteSlice(segment.getStartTime());
long hourSlice = DateTools.getHourSlice(segment.getStartTime());
long daySlice = DateTools.getDaySlice(segment.getStartTime());
int second = DateTools.getSecond(segment.getStartTime());
SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice = new SegmentPost.SegmentWithTimeSlice(segment, minuteSlice, hourSlice, daySlice, second);
return segmentWithTimeSlice;
}
public void executeAnalysis(AnalysisMember analysis) throws Exception {
List<SegmentPost.SegmentWithTimeSlice> cacheServiceSegment = this.mockCacheServiceSegmentSegmentTimeSlice();
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : cacheServiceSegment) {
analysis.analyse(segmentWithTimeSlice);
}
List<SegmentPost.SegmentWithTimeSlice> portalServiceSegment = this.mockPortalServiceSegmentSegmentTimeSlice();
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : portalServiceSegment) {
analysis.analyse(segmentWithTimeSlice);
}
List<SegmentPost.SegmentWithTimeSlice> persistenceServiceSegment = this.mockPersistenceServiceSegmentTimeSlice();
for (SegmentPost.SegmentWithTimeSlice segmentWithTimeSlice : persistenceServiceSegment) {
analysis.analyse(segmentWithTimeSlice);
}
analysis.onWork(new EndOfBatchCommand());
}
}