提交 0a696813 编写于 作者: 彭勇升 pengys 提交者: wu-sheng

Time bucket util improve. (#2795)

上级 50ecc53c
......@@ -20,7 +20,7 @@ package org.apache.skywalking.oap.server.core.alarm;
import java.util.List;
import org.apache.skywalking.oap.server.core.analysis.worker.RecordStreamProcessor;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.slf4j.*;
/**
......@@ -45,7 +45,7 @@ public class AlarmStandardPersistence implements AlarmCallback {
record.setName(message.getName());
record.setAlarmMessage(message.getAlarmMessage());
record.setStartTime(message.getStartTime());
record.setTimeBucket(TimeBucketUtils.INSTANCE.getSecondTimeBucket(message.getStartTime()));
record.setTimeBucket(TimeBucket.getSecondTimeBucket(message.getStartTime()));
RecordStreamProcessor.getInstance().in(record);
});
......
......@@ -13,37 +13,27 @@
* 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.
*
*/
package org.apache.skywalking.oap.server.library.util;
package org.apache.skywalking.oap.server.core.analysis;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.joda.time.LocalDateTime;
import org.apache.skywalking.oap.server.core.UnexpectedException;
/**
* @author peng-yongsheng
*/
public enum TimeBucketUtils {
INSTANCE;
public class TimeBucket {
public long getMinuteTimeBucket(long time) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
long year = calendar.get(Calendar.YEAR);
long month = calendar.get(Calendar.MONTH) + 1;
long day = calendar.get(Calendar.DAY_OF_MONTH);
long hour = calendar.get(Calendar.HOUR_OF_DAY);
long minute = calendar.get(Calendar.MINUTE);
public static long getSecondTimeBucket(long time) {
return getTimeBucket(time, Downsampling.Second);
}
return year * 100000000 + month * 1000000 + day * 10000 + hour * 100 + minute;
public static long getMinuteTimeBucket(long time) {
return getTimeBucket(time, Downsampling.Minute);
}
public long getSecondTimeBucket(long time) {
public static long getTimeBucket(long time, Downsampling downsampling) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
......@@ -54,30 +44,19 @@ public enum TimeBucketUtils {
long minute = calendar.get(Calendar.MINUTE);
long second = calendar.get(Calendar.SECOND);
return year * 10000000000L + month * 100000000 + day * 1000000 + hour * 10000 + minute * 100 + second;
}
public long getTime(LocalDateTime time) {
return time.getYear() * 10000000000L + time.getMonthOfYear() * 100000000 + time.getDayOfMonth() * 1000000
+ time.getHourOfDay() * 10000 + time.getMinuteOfHour() * 100 + time.getSecondOfMinute();
}
public String formatMinuteTimeBucket(long minuteTimeBucket) throws ParseException {
SimpleDateFormat minuteDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
Date date = minuteDateFormat.parse(String.valueOf(minuteTimeBucket));
SimpleDateFormat parsedMinuteDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return parsedMinuteDateFormat.format(date);
}
public long minuteToHour(long minuteBucket) {
return minuteBucket / 100;
}
public long minuteToDay(long minuteBucket) {
return minuteBucket / 100 / 100;
}
public long minuteToMonth(long minuteBucket) {
return minuteBucket / 100 / 100 / 100;
switch (downsampling) {
case Second:
return year * 10000000000L + month * 100000000 + day * 1000000 + hour * 10000 + minute * 100 + second;
case Minute:
return year * 100000000 + month * 1000000 + day * 10000 + hour * 100 + minute;
case Hour:
return year * 1000000 + month * 10000 + day * 100 + hour;
case Day:
return year * 10000 + month * 100 + day;
case Month:
return year * 100 + month;
default:
throw new UnexpectedException("Unknown downsampling value.");
}
}
}
......@@ -23,7 +23,7 @@ import java.util.*;
import org.apache.skywalking.oap.server.core.*;
import org.apache.skywalking.oap.server.core.analysis.Downsampling;
import org.apache.skywalking.oap.server.core.query.entity.Step;
import org.joda.time.*;
import org.joda.time.DateTime;
/**
* @author peng-yongsheng
......@@ -113,13 +113,6 @@ public enum DurationUtils {
throw new UnexpectedException("Unsupported step " + step.name());
}
public int minutesBetween(Step step, long startTimeBucket, long endTimeBucket) throws ParseException {
Date startDate = formatDate(step, startTimeBucket);
Date endDate = formatDate(step, endTimeBucket);
return Minutes.minutesBetween(new DateTime(startDate), new DateTime(endDate)).getMinutes();
}
public int minutesBetween(Downsampling downsampling, DateTime dateTime) {
switch (downsampling) {
case Month:
......@@ -128,22 +121,11 @@ public enum DurationUtils {
return 24 * 60;
case Hour:
return 60;
case Minute:
return 1;
case Second:
return 1;
default:
return 1;
}
}
public int secondsBetween(Step step, long startTimeBucket, long endTimeBucket) throws ParseException {
Date startDate = formatDate(step, startTimeBucket);
Date endDate = formatDate(step, endTimeBucket);
return Seconds.secondsBetween(new DateTime(startDate), new DateTime(endDate)).getSeconds();
}
public int secondsBetween(Downsampling downsampling, DateTime dateTime) {
switch (downsampling) {
case Month:
......@@ -154,8 +136,6 @@ public enum DurationUtils {
return 60 * 60;
case Minute:
return 60;
case Second:
return 1;
default:
return 1;
}
......@@ -207,28 +187,6 @@ public enum DurationUtils {
return durations;
}
private Date formatDate(Step step, long timeBucket) throws ParseException {
Date date = null;
switch (step) {
case MONTH:
date = new SimpleDateFormat("yyyyMM").parse(String.valueOf(timeBucket));
break;
case DAY:
date = new SimpleDateFormat("yyyyMMdd").parse(String.valueOf(timeBucket));
break;
case HOUR:
date = new SimpleDateFormat("yyyyMMddHH").parse(String.valueOf(timeBucket));
break;
case MINUTE:
date = new SimpleDateFormat("yyyyMMddHHmm").parse(String.valueOf(timeBucket));
break;
case SECOND:
date = new SimpleDateFormat("yyyyMMddHHmmss").parse(String.valueOf(timeBucket));
break;
}
return date;
}
private DateTime parseToDateTime(Downsampling downsampling, long time) throws ParseException {
DateTime dateTime = null;
......
......@@ -28,7 +28,7 @@ import org.apache.skywalking.oap.server.core.*;
import org.apache.skywalking.oap.server.core.register.service.*;
import org.apache.skywalking.oap.server.core.source.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
import org.apache.skywalking.oap.server.telemetry.api.*;
import org.slf4j.*;
......@@ -134,7 +134,7 @@ public class MetricServiceGRPCHandler extends MetricsServiceGrpc.MetricsServiceI
metricSource.setName(serviceInstanceName);
metricSource.setMetricName(metricFamily.getName());
metricSource.setValue(value);
metricSource.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(timestamp));
metricSource.setTimeBucket(TimeBucket.getMinuteTimeBucket(timestamp));
sourceReceiver.receive(metricSource);
}
break;
......
......@@ -26,6 +26,7 @@ import java.time.Instant;
import java.util.Base64;
import org.apache.skywalking.apm.util.StringUtil;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.source.*;
import org.apache.skywalking.oap.server.library.util.*;
import org.apache.skywalking.oap.server.receiver.sharing.server.CoreRegisterLinker;
......@@ -98,7 +99,7 @@ public class JaegerGRPCHandler extends CollectorServiceGrpc.CollectorServiceImpl
long duration = span.getDuration().getNanos() / 1_000_000;
jaegerSpan.setStartTime(Instant.ofEpochSecond(span.getStartTime().getSeconds(), span.getStartTime().getNanos()).toEpochMilli());
long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(jaegerSpan.getStartTime());
long timeBucket = TimeBucket.getSecondTimeBucket(jaegerSpan.getStartTime());
jaegerSpan.setTimeBucket(timeBucket);
jaegerSpan.setEndTime(jaegerSpan.getStartTime() + duration);
jaegerSpan.setLatency((int)duration);
......
......@@ -24,7 +24,7 @@ import org.apache.skywalking.apm.network.language.agent.v2.CLRMetricCollection;
import org.apache.skywalking.apm.network.language.agent.v2.CLRMetricReportServiceGrpc;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -49,7 +49,7 @@ public class CLRMetricReportServiceHandler extends CLRMetricReportServiceGrpc.CL
}
request.getMetricsList().forEach(metrics -> {
long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(metrics.getTime());
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(metrics.getTime());
clrSourceDispatcher.sendMetric(serviceInstanceId, minuteTimeBucket, metrics);
});
......
......@@ -23,7 +23,7 @@ import org.apache.skywalking.apm.network.common.Commands;
import org.apache.skywalking.apm.network.language.agent.v2.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.slf4j.*;
public class JVMMetricReportServiceHandler extends JVMMetricReportServiceGrpc.JVMMetricReportServiceImplBase implements GRPCHandler {
......@@ -44,7 +44,7 @@ public class JVMMetricReportServiceHandler extends JVMMetricReportServiceGrpc.JV
}
request.getMetricsList().forEach(metrics -> {
long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(metrics.getTime());
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(metrics.getTime());
jvmSourceDispatcher.sendMetric(serviceInstanceId, minuteTimeBucket, metrics);
});
......
......@@ -22,7 +22,7 @@ import io.grpc.stub.StreamObserver;
import org.apache.skywalking.apm.network.language.agent.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.slf4j.*;
/**
......@@ -46,7 +46,7 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe
}
request.getMetricsList().forEach(metrics -> {
long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(metrics.getTime());
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(metrics.getTime());
jvmSourceDispatcher.sendMetric(serviceInstanceId, minuteTimeBucket, metrics);
});
......
......@@ -28,7 +28,7 @@ import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
import org.apache.skywalking.oap.server.core.register.service.*;
import org.apache.skywalking.oap.server.core.source.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.slf4j.*;
/**
......@@ -89,7 +89,7 @@ public class TelemetryDataDispatcher {
*/
static void doDispatch(ServiceMeshMetricDataDecorator decorator) {
ServiceMeshMetric metrics = decorator.getMetric();
long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(metrics.getStartTime());
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(metrics.getStartTime());
heartbeat(decorator, minuteTimeBucket);
if (org.apache.skywalking.apm.network.common.DetectPoint.server.equals(metrics.getDetectPoint())) {
......
......@@ -24,7 +24,7 @@ import lombok.Setter;
import org.apache.skywalking.apm.network.language.agent.*;
import org.apache.skywalking.oap.server.library.buffer.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.*;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.*;
......@@ -162,7 +162,7 @@ public class SegmentParse {
}
if (exchanged) {
long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(segmentCoreInfo.getStartTime());
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(segmentCoreInfo.getStartTime());
segmentCoreInfo.setMinuteTimeBucket(minuteTimeBucket);
for (int i = 0; i < segmentDecorator.getSpansCount(); i++) {
......
......@@ -25,7 +25,7 @@ import org.apache.skywalking.apm.network.language.agent.*;
import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject;
import org.apache.skywalking.oap.server.library.buffer.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.*;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.*;
......@@ -167,7 +167,7 @@ public class SegmentParseV2 {
}
if (exchanged) {
long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(segmentCoreInfo.getStartTime());
long minuteTimeBucket = TimeBucket.getMinuteTimeBucket(segmentCoreInfo.getStartTime());
segmentCoreInfo.setMinuteTimeBucket(minuteTimeBucket);
for (int i = 0; i < segmentDecorator.getSpansCount(); i++) {
......
......@@ -25,7 +25,7 @@ import org.apache.skywalking.oap.server.core.*;
import org.apache.skywalking.oap.server.core.cache.*;
import org.apache.skywalking.oap.server.core.source.*;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.receiver.trace.provider.*;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.SpanTags;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.*;
......@@ -157,7 +157,7 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
statement.setId(segmentCoreInfo.getSegmentId() + "-" + spanDecorator.getSpanId());
statement.setDatabaseServiceId(sourceBuilder.getDestServiceId());
statement.setLatency(sourceBuilder.getLatency());
statement.setTimeBucket(TimeBucketUtils.INSTANCE.getSecondTimeBucket(segmentCoreInfo.getStartTime()));
statement.setTimeBucket(TimeBucket.getSecondTimeBucket(segmentCoreInfo.getStartTime()));
statement.setTraceId(traceId);
for (KeyStringValuePair tag : spanDecorator.getAllTags()) {
if (SpanTags.DB_STATEMENT.equals(tag.getKey())) {
......
......@@ -25,7 +25,7 @@ import org.apache.skywalking.oap.server.core.source.Segment;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.util.BooleanUtils;
import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
......@@ -68,7 +68,7 @@ public class SegmentSpanListener implements FirstSpanListener, EntrySpanListener
return;
}
long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(segmentCoreInfo.getStartTime());
long timeBucket = TimeBucket.getSecondTimeBucket(segmentCoreInfo.getStartTime());
segment.setSegmentId(segmentCoreInfo.getSegmentId());
segment.setServiceId(segmentCoreInfo.getServiceId());
......
......@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.receiver.zipkin.trace;
import java.util.List;
import org.apache.skywalking.apm.util.StringUtil;
import org.apache.skywalking.oap.server.core.Const;
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
import org.apache.skywalking.oap.server.core.cache.*;
import org.apache.skywalking.oap.server.core.source.*;
import org.apache.skywalking.oap.server.library.util.*;
......@@ -92,7 +93,7 @@ public class SpanForward {
long startTime = span.timestampAsLong() / 1000;
zipkinSpan.setStartTime(startTime);
if (startTime != 0) {
long timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(zipkinSpan.getStartTime());
long timeBucket = TimeBucket.getSecondTimeBucket(zipkinSpan.getStartTime());
zipkinSpan.setTimeBucket(timeBucket);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册