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