1616 *
1717 */
1818
19- package org .apache .skywalking .oap .server .core .analysis .metrics ;
19+ package org .apache .skywalking .oap .server .core .analysis .record ;
2020
21- import com .google .common .base .Strings ;
22- import lombok .EqualsAndHashCode ;
2321import lombok .Getter ;
2422import lombok .Setter ;
2523import org .apache .skywalking .oap .server .core .analysis .Layer ;
26- import org .apache .skywalking .oap .server .core .analysis .MetricsExtension ;
2724import org .apache .skywalking .oap .server .core .analysis .Stream ;
28- import org .apache .skywalking .oap .server .core .analysis .TimeBucket ;
29- import org .apache .skywalking .oap .server .core .analysis .worker .MetricsStreamProcessor ;
30- import org .apache .skywalking .oap .server .core .remote .grpc .proto .RemoteData ;
25+ import org .apache .skywalking .oap .server .core .analysis .worker .RecordStreamProcessor ;
3126import org .apache .skywalking .oap .server .core .source .ScopeDeclaration ;
3227import org .apache .skywalking .oap .server .core .storage .StorageID ;
3328import org .apache .skywalking .oap .server .core .storage .annotation .BanyanDB ;
3833import org .apache .skywalking .oap .server .core .storage .type .StorageBuilder ;
3934
4035import static org .apache .skywalking .oap .server .core .source .DefaultScopeDefine .EVENT ;
41- import static org .apache .skywalking .oap .server .library .util .StringUtil .isNotBlank ;
4236
4337@ Getter
4438@ Setter
4539@ ScopeDeclaration (id = EVENT , name = "Event" )
46- @ Stream (name = Event .INDEX_NAME , scopeId = EVENT , builder = Event .Builder .class , processor = MetricsStreamProcessor .class )
47- @ MetricsExtension (supportDownSampling = false , supportUpdate = true )
48- @ EqualsAndHashCode (
49- callSuper = false ,
50- of = "uuid"
51- )
52- @ BanyanDB .IndexMode
53- public class Event extends Metrics {
40+ @ Stream (name = Event .INDEX_NAME , scopeId = EVENT , builder = Event .Builder .class , processor = RecordStreamProcessor .class )
41+ @ BanyanDB .TimestampColumn (Event .TIMESTAMP )
42+ public class Event extends Record {
5443
5544 public static final String INDEX_NAME = "events" ;
5645
@@ -62,7 +51,7 @@ public class Event extends Metrics {
6251
6352 public static final String ENDPOINT = "endpoint" ;
6453
65- public static final String NAME = "name " ;
54+ public static final String NAME = "event_name " ;
6655
6756 public static final String TYPE = "type" ;
6857
@@ -78,10 +67,7 @@ public class Event extends Metrics {
7867
7968 private static final int PARAMETER_MAX_LENGTH = 4000 ;
8069
81- @ Override
82- protected StorageID id0 () {
83- return new StorageID ().append (UUID , getUuid ());
84- }
70+ public static final String TIMESTAMP = "timestamp" ;
8571
8672 @ Column (name = UUID )
8773 @ BanyanDB .SeriesID (index = 0 )
@@ -109,7 +95,6 @@ protected StorageID id0() {
10995 private String parameters ;
11096
11197 @ ElasticSearch .EnableDocValues
112- @ BanyanDB .EnableSort
11398 @ Column (name = START_TIME )
11499 private long startTime ;
115100
@@ -119,105 +104,16 @@ protected StorageID id0() {
119104 @ Column (name = LAYER )
120105 private Layer layer ;
121106
122- @ Override
123- public boolean combine (final Metrics metrics ) {
124- final Event event = (Event ) metrics ;
125-
126- // Set time bucket only when it's never set.
127- if (getTimeBucket () <= 0 ) {
128- if (event .getStartTime () > 0 ) {
129- setTimeBucket (TimeBucket .getMinuteTimeBucket (event .getStartTime ()));
130- } else if (event .getEndTime () > 0 ) {
131- setTimeBucket (TimeBucket .getMinuteTimeBucket (event .getEndTime ()));
132- }
133- }
134-
135- // Set start time only when it's never set, (`start` event may come after `end` event).
136- if (getStartTime () <= 0 && event .getStartTime () > 0 ) {
137- setStartTime (event .getStartTime ());
138- }
139-
140- if (event .getEndTime () > 0 ) {
141- setEndTime (event .getEndTime ());
142- }
143-
144- if (isNotBlank (event .getType ())) {
145- setType (event .getType ());
146- }
147- if (isNotBlank (event .getMessage ())) {
148- setMessage (event .getMessage ());
149- }
150- if (isNotBlank (event .getParameters ())) {
151- setParameters (event .getParameters ());
152- }
153- return true ;
154- }
155-
156- /**
157- * @since 9.0.0 Limit the length of {@link #parameters}
158- */
159- public void setParameters (String parameters ) {
160- this .parameters = parameters == null || parameters .length () <= PARAMETER_MAX_LENGTH ?
161- parameters : parameters .substring (0 , PARAMETER_MAX_LENGTH );
162- }
163-
164- @ Override
165- public void calculate () {
166- }
167-
168- @ Override
169- public Metrics toHour () {
170- return null ;
171- }
172-
173- @ Override
174- public Metrics toDay () {
175- return null ;
176- }
177-
178- @ Override
179- public void deserialize (final RemoteData remoteData ) {
180- setUuid (remoteData .getDataStrings (0 ));
181- setService (remoteData .getDataStrings (1 ));
182- setServiceInstance (remoteData .getDataStrings (2 ));
183- setEndpoint (remoteData .getDataStrings (3 ));
184- setName (remoteData .getDataStrings (4 ));
185- setType (remoteData .getDataStrings (5 ));
186- setMessage (remoteData .getDataStrings (6 ));
187- setParameters (remoteData .getDataStrings (7 ));
188-
189- setStartTime (remoteData .getDataLongs (0 ));
190- setEndTime (remoteData .getDataLongs (1 ));
191- setTimeBucket (remoteData .getDataLongs (2 ));
192-
193- setLayer (Layer .valueOf (remoteData .getDataIntegers (0 )));
194- }
195-
196- @ Override
197- public RemoteData .Builder serialize () {
198- final RemoteData .Builder builder = RemoteData .newBuilder ();
199-
200- builder .addDataStrings (getUuid ());
201- builder .addDataStrings (getService ());
202- builder .addDataStrings (getServiceInstance ());
203- builder .addDataStrings (getEndpoint ());
204- builder .addDataStrings (getName ());
205- builder .addDataStrings (getType ());
206- builder .addDataStrings (getMessage ());
207- builder .addDataStrings (Strings .nullToEmpty (getParameters ()));
208-
209- builder .addDataLongs (getStartTime ());
210- builder .addDataLongs (getEndTime ());
211- builder .addDataLongs (getTimeBucket ());
212-
213- builder .addDataIntegers (getLayer ().value ());
214-
215- return builder ;
216- }
107+ @ Setter
108+ @ Getter
109+ @ ElasticSearch .EnableDocValues
110+ @ Column (name = TIMESTAMP )
111+ private long timestamp ;
217112
218113 @ Override
219- public int remoteHashCode () {
220- return hashCode ();
114+ public StorageID id () {
115+ return new StorageID ().append (TIME_BUCKET , getTimeBucket ())
116+ .append (UUID , uuid );
221117 }
222118
223119 public static class Builder implements StorageBuilder <Event > {
@@ -235,6 +131,7 @@ public Event storage2Entity(final Convert2Entity converter) {
235131 record .setStartTime (((Number ) converter .get (START_TIME )).longValue ());
236132 record .setEndTime (((Number ) converter .get (END_TIME )).longValue ());
237133 record .setTimeBucket (((Number ) converter .get (TIME_BUCKET )).longValue ());
134+ record .setTimestamp (((Number ) converter .get (TIMESTAMP )).longValue ());
238135 if (converter .get (LAYER ) != null ) {
239136 record .setLayer (Layer .valueOf (((Number ) converter .get (LAYER )).intValue ()));
240137 }
@@ -254,6 +151,7 @@ public void entity2Storage(final Event storageData, final Convert2Storage conver
254151 converter .accept (START_TIME , storageData .getStartTime ());
255152 converter .accept (END_TIME , storageData .getEndTime ());
256153 converter .accept (TIME_BUCKET , storageData .getTimeBucket ());
154+ converter .accept (TIMESTAMP , storageData .getTimestamp ());
257155 Layer layer = storageData .getLayer ();
258156 converter .accept (LAYER , layer != null ? layer .value () : Layer .UNDEFINED .value ());
259157 }
0 commit comments