1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 package software.amazon.awssdk.benchmark.stats;
17 
18 import com.fasterxml.jackson.core.JsonGenerator;
19 import com.fasterxml.jackson.core.JsonParser;
20 import com.fasterxml.jackson.databind.DeserializationContext;
21 import com.fasterxml.jackson.databind.JsonDeserializer;
22 import com.fasterxml.jackson.databind.JsonSerializer;
23 import com.fasterxml.jackson.databind.SerializerProvider;
24 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
25 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
26 import java.io.IOException;
27 import java.time.ZonedDateTime;
28 import java.time.format.DateTimeFormatter;
29 import org.openjdk.jmh.annotations.Mode;
30 import org.openjdk.jmh.infra.BenchmarkParams;
31 import software.amazon.awssdk.core.util.VersionInfo;
32 
33 /**
34  * Contains metadata for the benchmark
35  */
36 public class SdkBenchmarkParams {
37 
38     private String sdkVersion;
39 
40     private String jdkVersion;
41 
42     private String jvmName;
43 
44     private String jvmVersion;
45 
46     private Mode mode;
47 
48     @JsonSerialize(using = ZonedDateSerializer.class)
49     @JsonDeserialize(using = ZonedDateDeserializer.class)
50     private ZonedDateTime date;
51 
SdkBenchmarkParams()52     public SdkBenchmarkParams() {
53     }
54 
SdkBenchmarkParams(BenchmarkParams benchmarkParams)55     public SdkBenchmarkParams(BenchmarkParams benchmarkParams) {
56         this.sdkVersion = VersionInfo.SDK_VERSION;
57         this.jdkVersion = benchmarkParams.getJdkVersion();
58         this.jvmName = benchmarkParams.getVmName();
59         this.jvmVersion = benchmarkParams.getVmVersion();
60         this.mode = benchmarkParams.getMode();
61         this.date = ZonedDateTime.now();
62     }
63 
getSdkVersion()64     public String getSdkVersion() {
65         return sdkVersion;
66     }
67 
setSdkVersion(String sdkVersion)68     public void setSdkVersion(String sdkVersion) {
69         this.sdkVersion = sdkVersion;
70     }
71 
getJdkVersion()72     public String getJdkVersion() {
73         return jdkVersion;
74     }
75 
setJdkVersion(String jdkVersion)76     public void setJdkVersion(String jdkVersion) {
77         this.jdkVersion = jdkVersion;
78     }
79 
getJvmName()80     public String getJvmName() {
81         return jvmName;
82     }
83 
setJvmName(String jvmName)84     public void setJvmName(String jvmName) {
85         this.jvmName = jvmName;
86     }
87 
getJvmVersion()88     public String getJvmVersion() {
89         return jvmVersion;
90     }
91 
setJvmVersion(String jvmVersion)92     public void setJvmVersion(String jvmVersion) {
93         this.jvmVersion = jvmVersion;
94     }
95 
getDate()96     public ZonedDateTime getDate() {
97         return date;
98     }
99 
setDate(ZonedDateTime date)100     public void setDate(ZonedDateTime date) {
101         this.date = date;
102     }
103 
getMode()104     public Mode getMode() {
105         return mode;
106     }
107 
setMode(Mode mode)108     public void setMode(Mode mode) {
109         this.mode = mode;
110     }
111 
112     private static class ZonedDateSerializer extends JsonSerializer<ZonedDateTime> {
113 
114         @Override
serialize(ZonedDateTime value, JsonGenerator gen, SerializerProvider serializers)115         public void serialize(ZonedDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
116             gen.writeString(value.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));
117         }
118     }
119 
120     private static class ZonedDateDeserializer extends JsonDeserializer<ZonedDateTime> {
121         @Override
deserialize(JsonParser p, DeserializationContext ctxt)122         public ZonedDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
123             return ZonedDateTime.parse(p.getValueAsString());
124         }
125     }
126 }
127