diff options
| author | mjkwiatkowski <mati.rewa@gmail.com> | 2026-06-15 23:48:44 +0200 |
|---|---|---|
| committer | mjkwiatkowski <mati.rewa@gmail.com> | 2026-06-15 23:48:44 +0200 |
| commit | 0731bd58889df127ef87aba2590d505d79e6646f (patch) | |
| tree | 128aceeaf60ac5c098297f7cfda9fa47f974fc84 /opendc-common/src | |
| parent | f1ecbf0ce40d43685d8a6aeba0fe4cdebbd4536f (diff) | |
feat: migrated the past project to the sunfish repo
Diffstat (limited to 'opendc-common/src')
13 files changed, 1300 insertions, 0 deletions
diff --git a/opendc-common/src/main/java/org/opendc/common/ProtobufMetrics.java b/opendc-common/src/main/java/org/opendc/common/ProtobufMetrics.java new file mode 100644 index 00000000..c0f15f63 --- /dev/null +++ b/opendc-common/src/main/java/org/opendc/common/ProtobufMetrics.java @@ -0,0 +1,950 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: schema.proto +// Protobuf Java Version: 4.35.0 + +package org.opendc.common; + +@com.google.protobuf.Generated +public final class ProtobufMetrics extends com.google.protobuf.GeneratedFile { + private ProtobufMetrics() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 35, + /* patch= */ 0, + /* suffix= */ "", + "ProtobufMetrics"); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface ProtoExportOrBuilder extends + // @@protoc_insertion_point(interface_extends:proto.ProtoExport) + com.google.protobuf.MessageOrBuilder { + + /** + * <code>string timestamp = 1;</code> + * @return The timestamp. + */ + java.lang.String getTimestamp(); + /** + * <code>string timestamp = 1;</code> + * @return The bytes for timestamp. + */ + com.google.protobuf.ByteString + getTimestampBytes(); + + /** + * <code>string host_id = 2;</code> + * @return The hostId. + */ + java.lang.String getHostId(); + /** + * <code>string host_id = 2;</code> + * @return The bytes for hostId. + */ + com.google.protobuf.ByteString + getHostIdBytes(); + + /** + * <code>int32 tasksactive = 3;</code> + * @return The tasksactive. + */ + int getTasksactive(); + + /** + * <code>double cpuutilization = 4;</code> + * @return The cpuutilization. + */ + double getCpuutilization(); + + /** + * <code>double energyusage = 5;</code> + * @return The energyusage. + */ + double getEnergyusage(); + } + /** + * Protobuf type {@code proto.ProtoExport} + */ + public static final class ProtoExport extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:proto.ProtoExport) + ProtoExportOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 35, + /* patch= */ 0, + /* suffix= */ "", + "ProtoExport"); + } + // Use ProtoExport.newBuilder() to construct. + private ProtoExport(com.google.protobuf.GeneratedMessage.Builder<?> builder) { + super(builder); + } + private ProtoExport() { + timestamp_ = ""; + hostId_ = ""; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendc.common.ProtobufMetrics.internal_static_proto_ProtoExport_descriptor; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return org.opendc.common.ProtobufMetrics.internal_static_proto_ProtoExport_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendc.common.ProtobufMetrics.internal_static_proto_ProtoExport_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendc.common.ProtobufMetrics.ProtoExport.class, org.opendc.common.ProtobufMetrics.ProtoExport.Builder.class); + } + + public static final int TIMESTAMP_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object timestamp_ = ""; + /** + * <code>string timestamp = 1;</code> + * @return The timestamp. + */ + @java.lang.Override + public java.lang.String getTimestamp() { + java.lang.Object ref = timestamp_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + timestamp_ = s; + return s; + } + } + /** + * <code>string timestamp = 1;</code> + * @return The bytes for timestamp. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTimestampBytes() { + java.lang.Object ref = timestamp_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + timestamp_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int HOST_ID_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object hostId_ = ""; + /** + * <code>string host_id = 2;</code> + * @return The hostId. + */ + @java.lang.Override + public java.lang.String getHostId() { + java.lang.Object ref = hostId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + hostId_ = s; + return s; + } + } + /** + * <code>string host_id = 2;</code> + * @return The bytes for hostId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getHostIdBytes() { + java.lang.Object ref = hostId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + hostId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TASKSACTIVE_FIELD_NUMBER = 3; + private int tasksactive_ = 0; + /** + * <code>int32 tasksactive = 3;</code> + * @return The tasksactive. + */ + @java.lang.Override + public int getTasksactive() { + return tasksactive_; + } + + public static final int CPUUTILIZATION_FIELD_NUMBER = 4; + private double cpuutilization_ = 0D; + /** + * <code>double cpuutilization = 4;</code> + * @return The cpuutilization. + */ + @java.lang.Override + public double getCpuutilization() { + return cpuutilization_; + } + + public static final int ENERGYUSAGE_FIELD_NUMBER = 5; + private double energyusage_ = 0D; + /** + * <code>double energyusage = 5;</code> + * @return The energyusage. + */ + @java.lang.Override + public double getEnergyusage() { + return energyusage_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(timestamp_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, timestamp_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(hostId_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, hostId_); + } + if (tasksactive_ != 0) { + output.writeInt32(3, tasksactive_); + } + if (java.lang.Double.doubleToRawLongBits(cpuutilization_) != 0) { + output.writeDouble(4, cpuutilization_); + } + if (java.lang.Double.doubleToRawLongBits(energyusage_) != 0) { + output.writeDouble(5, energyusage_); + } + getUnknownFields().writeTo(output); + } + private int computeSerializedSize_0() { + int size = 0; + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(timestamp_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, timestamp_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(hostId_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, hostId_); + } + if (tasksactive_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, tasksactive_); + } + if (java.lang.Double.doubleToRawLongBits(cpuutilization_) != 0) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(4, cpuutilization_); + } + if (java.lang.Double.doubleToRawLongBits(energyusage_) != 0) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(5, energyusage_); + } + return size; + } + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += computeSerializedSize_0(); + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendc.common.ProtobufMetrics.ProtoExport)) { + return super.equals(obj); + } + org.opendc.common.ProtobufMetrics.ProtoExport other = (org.opendc.common.ProtobufMetrics.ProtoExport) obj; + + if (!getTimestamp() + .equals(other.getTimestamp())) return false; + if (!getHostId() + .equals(other.getHostId())) return false; + if (getTasksactive() + != other.getTasksactive()) return false; + if (java.lang.Double.doubleToLongBits(getCpuutilization()) + != java.lang.Double.doubleToLongBits( + other.getCpuutilization())) return false; + if (java.lang.Double.doubleToLongBits(getEnergyusage()) + != java.lang.Double.doubleToLongBits( + other.getEnergyusage())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getTimestamp().hashCode(); + hash = (37 * hash) + HOST_ID_FIELD_NUMBER; + hash = (53 * hash) + getHostId().hashCode(); + hash = (37 * hash) + TASKSACTIVE_FIELD_NUMBER; + hash = (53 * hash) + getTasksactive(); + hash = (37 * hash) + CPUUTILIZATION_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + java.lang.Double.doubleToLongBits(getCpuutilization())); + hash = (37 * hash) + ENERGYUSAGE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + java.lang.Double.doubleToLongBits(getEnergyusage())); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static org.opendc.common.ProtobufMetrics.ProtoExport parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static org.opendc.common.ProtobufMetrics.ProtoExport parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static org.opendc.common.ProtobufMetrics.ProtoExport parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendc.common.ProtobufMetrics.ProtoExport prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code proto.ProtoExport} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder<Builder> implements + // @@protoc_insertion_point(builder_implements:proto.ProtoExport) + org.opendc.common.ProtobufMetrics.ProtoExportOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendc.common.ProtobufMetrics.internal_static_proto_ProtoExport_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendc.common.ProtobufMetrics.internal_static_proto_ProtoExport_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendc.common.ProtobufMetrics.ProtoExport.class, org.opendc.common.ProtobufMetrics.ProtoExport.Builder.class); + } + + // Construct using org.opendc.common.ProtobufMetrics.ProtoExport.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + timestamp_ = ""; + hostId_ = ""; + tasksactive_ = 0; + cpuutilization_ = 0D; + energyusage_ = 0D; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendc.common.ProtobufMetrics.internal_static_proto_ProtoExport_descriptor; + } + + @java.lang.Override + public org.opendc.common.ProtobufMetrics.ProtoExport getDefaultInstanceForType() { + return org.opendc.common.ProtobufMetrics.ProtoExport.getDefaultInstance(); + } + + @java.lang.Override + public org.opendc.common.ProtobufMetrics.ProtoExport build() { + org.opendc.common.ProtobufMetrics.ProtoExport result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendc.common.ProtobufMetrics.ProtoExport buildPartial() { + org.opendc.common.ProtobufMetrics.ProtoExport result = new org.opendc.common.ProtobufMetrics.ProtoExport(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(org.opendc.common.ProtobufMetrics.ProtoExport result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.timestamp_ = timestamp_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.hostId_ = hostId_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.tasksactive_ = tasksactive_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.cpuutilization_ = cpuutilization_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.energyusage_ = energyusage_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendc.common.ProtobufMetrics.ProtoExport) { + return mergeFrom((org.opendc.common.ProtobufMetrics.ProtoExport)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendc.common.ProtobufMetrics.ProtoExport other) { + if (other == org.opendc.common.ProtobufMetrics.ProtoExport.getDefaultInstance()) return this; + if (!other.getTimestamp().isEmpty()) { + timestamp_ = other.timestamp_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getHostId().isEmpty()) { + hostId_ = other.hostId_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.getTasksactive() != 0) { + setTasksactive(other.getTasksactive()); + } + if (java.lang.Double.doubleToRawLongBits(other.getCpuutilization()) != 0) { + setCpuutilization(other.getCpuutilization()); + } + if (java.lang.Double.doubleToRawLongBits(other.getEnergyusage()) != 0) { + setEnergyusage(other.getEnergyusage()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + timestamp_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + hostId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: { + tasksactive_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 33: { + cpuutilization_ = input.readDouble(); + bitField0_ |= 0x00000008; + break; + } // case 33 + case 41: { + energyusage_ = input.readDouble(); + bitField0_ |= 0x00000010; + break; + } // case 41 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object timestamp_ = ""; + /** + * <code>string timestamp = 1;</code> + * @return The timestamp. + */ + public java.lang.String getTimestamp() { + java.lang.Object ref = timestamp_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + timestamp_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * <code>string timestamp = 1;</code> + * @return The bytes for timestamp. + */ + public com.google.protobuf.ByteString + getTimestampBytes() { + java.lang.Object ref = timestamp_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + timestamp_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * <code>string timestamp = 1;</code> + * @param value The timestamp to set. + * @return This builder for chaining. + */ + public Builder setTimestamp( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + timestamp_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * <code>string timestamp = 1;</code> + * @return This builder for chaining. + */ + public Builder clearTimestamp() { + timestamp_ = getDefaultInstance().getTimestamp(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * <code>string timestamp = 1;</code> + * @param value The bytes for timestamp to set. + * @return This builder for chaining. + */ + public Builder setTimestampBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + timestamp_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object hostId_ = ""; + /** + * <code>string host_id = 2;</code> + * @return The hostId. + */ + public java.lang.String getHostId() { + java.lang.Object ref = hostId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + hostId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * <code>string host_id = 2;</code> + * @return The bytes for hostId. + */ + public com.google.protobuf.ByteString + getHostIdBytes() { + java.lang.Object ref = hostId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + hostId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * <code>string host_id = 2;</code> + * @param value The hostId to set. + * @return This builder for chaining. + */ + public Builder setHostId( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + hostId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * <code>string host_id = 2;</code> + * @return This builder for chaining. + */ + public Builder clearHostId() { + hostId_ = getDefaultInstance().getHostId(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * <code>string host_id = 2;</code> + * @param value The bytes for hostId to set. + * @return This builder for chaining. + */ + public Builder setHostIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + hostId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private int tasksactive_ ; + /** + * <code>int32 tasksactive = 3;</code> + * @return The tasksactive. + */ + @java.lang.Override + public int getTasksactive() { + return tasksactive_; + } + /** + * <code>int32 tasksactive = 3;</code> + * @param value The tasksactive to set. + * @return This builder for chaining. + */ + public Builder setTasksactive(int value) { + + tasksactive_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * <code>int32 tasksactive = 3;</code> + * @return This builder for chaining. + */ + public Builder clearTasksactive() { + bitField0_ = (bitField0_ & ~0x00000004); + tasksactive_ = 0; + onChanged(); + return this; + } + + private double cpuutilization_ ; + /** + * <code>double cpuutilization = 4;</code> + * @return The cpuutilization. + */ + @java.lang.Override + public double getCpuutilization() { + return cpuutilization_; + } + /** + * <code>double cpuutilization = 4;</code> + * @param value The cpuutilization to set. + * @return This builder for chaining. + */ + public Builder setCpuutilization(double value) { + + cpuutilization_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * <code>double cpuutilization = 4;</code> + * @return This builder for chaining. + */ + public Builder clearCpuutilization() { + bitField0_ = (bitField0_ & ~0x00000008); + cpuutilization_ = 0D; + onChanged(); + return this; + } + + private double energyusage_ ; + /** + * <code>double energyusage = 5;</code> + * @return The energyusage. + */ + @java.lang.Override + public double getEnergyusage() { + return energyusage_; + } + /** + * <code>double energyusage = 5;</code> + * @param value The energyusage to set. + * @return This builder for chaining. + */ + public Builder setEnergyusage(double value) { + + energyusage_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * <code>double energyusage = 5;</code> + * @return This builder for chaining. + */ + public Builder clearEnergyusage() { + bitField0_ = (bitField0_ & ~0x00000010); + energyusage_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:proto.ProtoExport) + } + + // @@protoc_insertion_point(class_scope:proto.ProtoExport) + private static final org.opendc.common.ProtobufMetrics.ProtoExport DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendc.common.ProtobufMetrics.ProtoExport(); + } + + public static org.opendc.common.ProtobufMetrics.ProtoExport getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser<ProtoExport> + PARSER = new com.google.protobuf.AbstractParser<ProtoExport>() { + @java.lang.Override + public ProtoExport parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser<ProtoExport> parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser<ProtoExport> getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendc.common.ProtobufMetrics.ProtoExport getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_proto_ProtoExport_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_proto_ProtoExport_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static final com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\014schema.proto\022\005proto\"s\n\013ProtoExport\022\021\n\t" + + "timestamp\030\001 \001(\t\022\017\n\007host_id\030\002 \001(\t\022\023\n\013task" + + "sactive\030\003 \001(\005\022\026\n\016cpuutilization\030\004 \001(\001\022\023\n" + + "\013energyusage\030\005 \001(\001B$\n\021org.opendc.commonB" + + "\017ProtobufMetricsb\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_proto_ProtoExport_descriptor = + getDescriptor().getMessageType(0); + internal_static_proto_ProtoExport_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_proto_ProtoExport_descriptor, + new java.lang.String[] { "Timestamp", "HostId", "Tasksactive", "Cpuutilization", "Energyusage", }); + descriptor.resolveAllFeaturesImmutable(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/opendc-common/src/main/kotlin/org/opendc/common/annotations/Endpoint.kt b/opendc-common/src/main/kotlin/org/opendc/common/annotations/Endpoint.kt new file mode 100644 index 00000000..4ef08a71 --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/annotations/Endpoint.kt @@ -0,0 +1,6 @@ +package org.opendc.common.annotations + +@RequiresOptIn(message = "This is a registered API endpoint.") +@Retention(AnnotationRetention.BINARY) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.CONSTRUCTOR) +public annotation class Endpoint(val method: String, val name : String)
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/api/AssetsController.kt b/opendc-common/src/main/kotlin/org/opendc/common/api/AssetsController.kt new file mode 100644 index 00000000..c6f34d19 --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/api/AssetsController.kt @@ -0,0 +1,72 @@ +package org.opendc.common.api + +import org.opendc.common.annotations.Endpoint +import io.javalin.http.Handler + +/** + * This class represents the `/assets` endpoint. + * + * @author Mateusz Kwiatkowski + * + * */ + + +//TODO: fix -> this is all wrong. +// Sending the experiment file is completely useless. +// You need to send tasks.parquet +public class AssetsController { + /** + * Returns a concatenated JSON string of all assets. + */ + @Endpoint("GET","/assets") + public fun getAssets() : Handler { + return Handler { ctx -> ctx.status(200) + println(ctx.body()) + } + } + + /** + * Returns an asset with `id` as a JSON string. + */ + @Endpoint("GET", "/assets/{id}") + public fun getAssetsId(): Handler { + return Handler { ctx -> ctx.status(200) } + } + + /** + * Saves the asset specified in the HTTP body. + * Returns the asset `id`. + */ + @Endpoint("POST", "/assets") + public fun postAsset() : Handler { + return Handler { ctx -> ctx.status(200) + println(ctx.body()) + } + } + + /** + * Modifies the specified asset. + * Deletes all results from experiments with this asset. + */ + @Endpoint("PUT", "/assets/{id}") + public fun putAssetId() : Handler { + return Handler { ctx -> ctx.status(200) } + } + + /** + * Deletes an asset with `id`. + * Deletes all results from experiments with this asset. + */ + @Endpoint("DELETE", "/assets/{id}") + public fun deleteAssetId() : Handler { + return Handler { ctx -> ctx.status(200) } + } + + /** + * Deletes all assets + */ + @Endpoint("DELETE", "/assets") + public fun deleteAsset() : Handler { + return Handler { ctx -> ctx.status(200) } + } +}
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/api/ResourceController.kt b/opendc-common/src/main/kotlin/org/opendc/common/api/ResourceController.kt new file mode 100644 index 00000000..cf1d3cac --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/api/ResourceController.kt @@ -0,0 +1,30 @@ +package org.opendc.common.api + +import org.opendc.common.annotations.Endpoint + +/** + * This class represents the `/resources` endpoint. + * + * @author Mateusz Kwiatkowski + * + * */ + +public class ResourceController { + + /** + * Returns all data analytics for all experiments. + */ + @Endpoint("GET", "/resources") + public fun getResources() { + return + } + + /** + * Returns data analytics for experiment with `id`. + * + * */ + @Endpoint("GET", "/resources") + public fun getResourcesId() { + return + } +}
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/HTTPClient.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/HTTPClient.kt new file mode 100644 index 00000000..fc5bc57b --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/HTTPClient.kt @@ -0,0 +1,46 @@ +package org.opendc.common.utils + +import java.io.File +import java.io.InputStreamReader +import java.net.URI +import java.net.http.* +import java.net.http.HttpResponse.BodyHandlers.ofString + +/** + * Singleton class representing the real datacenter client. + * The client is asynchronous and initiates the connection first. + * + * @author Mateusz Kwiatkowski + */ + +public class HTTPClient private constructor() { + public companion object { + private var instance: HTTPClient? = null + private var client = HttpClient.newBuilder().build() + + public fun getInstance(): HTTPClient? { + if (instance == null) { + instance = HTTPClient() + } + return instance + } + } + + // TODO: this class must send the experiment JSON file to the digital twin + public fun sendExperiment(experiment: File) { + val input = experiment.inputStream() + val charArray = CharArray(experiment.length().toInt()) + val isr = InputStreamReader(input) + + isr.read(charArray) + + val request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:8080/assets")) + .header("Content-type", "application/json") + // TODO: this is obviously wrong, find an efficient way to send JSON over network + .POST(HttpRequest.BodyPublishers.ofString(String(charArray))) + .build() + val response = client?.send(request, ofString()) + check(response?.statusCode() == 200) + } +}
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/JavalinRunner.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/JavalinRunner.kt new file mode 100644 index 00000000..23baac27 --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/JavalinRunner.kt @@ -0,0 +1,33 @@ +package org.opendc.common.utils + +import io.javalin.Javalin +import org.opendc.common.annotations.Endpoint +import org.opendc.common.api.AssetsController + +/** + * Represents the digital twin monitoring server. + * For endpoint documentation see `AssetsController`. + * @author Mateusz Kwiatkowski + * @see <a href=https://javalin.io/documentation>https://javalin.io/documentation</a> + * @see org.opendc.common.api.AssetsController + */ + +@OptIn(Endpoint::class) +public class JavalinRunner { + private val assetsController : AssetsController = AssetsController() + + init { + val app = Javalin.create().start() + app.get("/assets", assetsController.getAssets()) + + app.get("/assets/{id}", assetsController.getAssetsId()) + + app.post("/assets", assetsController.postAsset()) + + app.put("/assets/{id}", assetsController.putAssetId()) + + app.delete("/assets/{id}", assetsController.deleteAssetId()) + + app.delete("/assets", assetsController.deleteAsset()) + } +}
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/Kafka.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/Kafka.kt new file mode 100644 index 00000000..81eb6752 --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/Kafka.kt @@ -0,0 +1,38 @@ +package org.opendc.common.utils + +import com.fasterxml.jackson.dataformat.toml.TomlMapper +import org.apache.kafka.clients.producer.KafkaProducer +import org.apache.kafka.clients.producer.ProducerRecord +import org.opendc.common.ProtobufMetrics +import java.util.* +/** + * Represents the Kafka interface. + * @constructor `topic` the Kafka topic + * @author Mateusz Kwiatkowski + * @see <a href=https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html> + * https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html</a> + * @see <a href=https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html> + * https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html</a> + */ + +@Suppress("DEPRECATION") +public class Kafka(private val topic: String) { + private var properties : Properties + + init { + check(!topic.contains("-")) + properties = TomlMapper().readerFor(Properties().javaClass) + .readValue(Kafka::class.java.getResource("/producer.toml")) + } + + public fun getSend() : (ProtobufMetrics.ProtoExport) -> Unit { + val producer = KafkaProducer<String, ProtobufMetrics.ProtoExport>(properties) + return fun (value : ProtobufMetrics.ProtoExport) { + try { + producer.send(ProducerRecord(this.topic, value)) + } catch (e: Exception) { + println("${e.message}") + } + } + } +}
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/PostgresqlDB.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/PostgresqlDB.kt new file mode 100644 index 00000000..35d03feb --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/PostgresqlDB.kt @@ -0,0 +1,52 @@ +package org.opendc.common.utils + +import com.fasterxml.jackson.dataformat.toml.TomlMapper +import java.sql.Connection +import java.sql.DriverManager +import java.sql.SQLException +import java.util.Properties +/** + * Represents the Postgresql database. + * On setup cleans the entire database. + * + * @author Mateusz Kwiatkowski + * + * @see <a href=https://docs.oracle.com/en/java/javase/21/docs/api/java.sql/java/sql/DriverManager.html> + * https://docs.oracle.com/en/java/javase/21/docs/api/java.sql/java/sql/DriverManager.html</a> + */ +@Suppress("DEPRECATION") +public class PostgresqlDB { + private var properties = Properties() + private var connection : Connection? = null + + init { + try { + properties = TomlMapper().readerFor(Properties().javaClass) + .readValue(PostgresqlDB::class.java.getResource("/database.toml")) + connection = DriverManager.getConnection( + properties.getProperty("address").asJdbc(properties.getProperty("database")), + properties.getProperty("user"), + properties.getProperty("password")) + clear() + } catch (e: SQLException) { + print("${e.message}") + } + } + public fun clear(){ + val DELETE_ALL_TABLES = """ + DROP SCHEMA public CASCADE; + CREATE SCHEMA public; + """.trimIndent() + try { + val st = connection?.createStatement() + st?.executeQuery(DELETE_ALL_TABLES) + } catch (e: SQLException){ + println("${e.message}") + } + } + + private fun String.asJdbc(database : String) : String { + return "jdbc:postgresql://$this/$database" + } + +}
\ No newline at end of file diff --git a/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt b/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt new file mode 100644 index 00000000..b659d40a --- /dev/null +++ b/opendc-common/src/main/kotlin/org/opendc/common/utils/Redis.kt @@ -0,0 +1,43 @@ +package org.opendc.common.utils + +import com.fasterxml.jackson.dataformat.toml.TomlMapper +import redis.clients.jedis.RedisClient +import redis.clients.jedis.StreamEntryID +import redis.clients.jedis.params.XReadParams +import java.util.Properties + +/** + * This class represents the Redis server instance. + * @author Mateusz Kwiatkowski + * @see <a href=https://redis.io/docs/latest/>https://redis.io/docs/latest/</a> + * + * @see <a href=https://redis.io/docs/latest/develop/data-types/streams/>https://redis.io/docs/latest/develop/data-types/streams/</a> + */ + +@Suppress("DEPRECATION") +public class Redis { + private var properties : Properties + + init { + properties = TomlMapper().readerFor(Properties().javaClass) + .readValue(Kafka::class.java.getResource("/producer.toml")) + } + + public fun run() { + val jedis : RedisClient = RedisClient.create("redis://localhost:6379") + + val res5 = jedis.xread( + XReadParams.xReadParams().block(300).count(100), + object : HashMap<String?, StreamEntryID?>() { + init { + put("${properties.getProperty("table")}", StreamEntryID()) + } + }) + + // in Redis you can subscribe to updates to a stream. + // you should base your application off this. + // you can listen for new items with XREAD + println(res5) + jedis.close() + } +}
\ No newline at end of file diff --git a/opendc-common/src/main/resources/consumer.toml b/opendc-common/src/main/resources/consumer.toml new file mode 100644 index 00000000..0f4a2d1d --- /dev/null +++ b/opendc-common/src/main/resources/consumer.toml @@ -0,0 +1,6 @@ +"bootstrap.servers" = "127.0.0.1:9092" +"key.deserializer" = "org.apache.kafka.common.serialization.VoidDeserializer" +"value.deserializer" = "io.confluent.kafka.serializers.protobuf.KafkaProtobufDeserializer" +"group.id" = "connect-postgresql-sink" +"enable.auto.commit" = "true" +"auto.commit.interval.ms" = "1000" diff --git a/opendc-common/src/main/resources/database.toml b/opendc-common/src/main/resources/database.toml new file mode 100644 index 00000000..c9aaa253 --- /dev/null +++ b/opendc-common/src/main/resources/database.toml @@ -0,0 +1,5 @@ +"address" = "127.0.0.1:5432" +"username" = "matt" +"password" = "admin" +"database" = "opendc" +"stream" = "postgres_topic"
\ No newline at end of file diff --git a/opendc-common/src/main/resources/producer.toml b/opendc-common/src/main/resources/producer.toml new file mode 100644 index 00000000..8202e93b --- /dev/null +++ b/opendc-common/src/main/resources/producer.toml @@ -0,0 +1,5 @@ +"bootstrap.servers" = "127.0.0.1:9092" +"key.serializer" = "org.apache.kafka.common.serialization.VoidSerializer" +"value.serializer" = "io.confluent.kafka.serializers.protobuf.KafkaProtobufSerializer" +"schema.registry.url" = "http://localhost:8081" +"auto.register.schemas" = "true" diff --git a/opendc-common/src/main/resources/schema.proto b/opendc-common/src/main/resources/schema.proto new file mode 100644 index 00000000..d0aa18d5 --- /dev/null +++ b/opendc-common/src/main/resources/schema.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package proto; + +option java_package = "org.opendc.common"; +option java_outer_classname = "ProtobufMetrics"; + +message ProtoExport { + string timestamp = 1; + string host_id = 2; + int32 tasksactive = 3; + double cpuutilization = 4; + double energyusage = 5; +}
\ No newline at end of file |
