From eb766269ca42c91a985797c15fdaa9de255b904e Mon Sep 17 00:00:00 2001 From: Filip Krzywka Date: Tue, 11 Sep 2018 14:45:53 +0200 Subject: Align with latest HV-VES proto definition - excluded measurements proto files from build to keep them reference-only Change-Id: I8c6de20eeeb1b9f8cd2ae4e865de368afe55cc91 Issue-ID: DCAEGEN2-775 Signed-off-by: Filip Krzywka --- hv-collector-domain/pom.xml | 2 +- .../dcae/collectors/veshv/domain/VesEventDomain.kt | 35 +++++++ .../dcae/collectors/veshv/domain/validation.kt | 17 ++-- .../src/main/proto/HVRanMeasFields-v5.proto | 54 ----------- .../src/main/proto/VesEvent-v5.proto | 88 ----------------- .../src/main/proto/event/VesEvent.proto | 74 +++++++++++++++ .../src/main/proto/measurements/HVMeasFields.proto | 43 +++++++++ .../proto/measurements/MeasDataCollection.proto | 104 +++++++++++++++++++++ .../collectors/veshv/domain/WireFrameCodecsTest.kt | 1 - 9 files changed, 266 insertions(+), 152 deletions(-) create mode 100644 hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/VesEventDomain.kt delete mode 100644 hv-collector-domain/src/main/proto/HVRanMeasFields-v5.proto delete mode 100644 hv-collector-domain/src/main/proto/VesEvent-v5.proto create mode 100644 hv-collector-domain/src/main/proto/event/VesEvent.proto create mode 100644 hv-collector-domain/src/main/proto/measurements/HVMeasFields.proto create mode 100644 hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto (limited to 'hv-collector-domain') diff --git a/hv-collector-domain/pom.xml b/hv-collector-domain/pom.xml index eb2a7582..8f6ec874 100644 --- a/hv-collector-domain/pom.xml +++ b/hv-collector-domain/pom.xml @@ -74,7 +74,7 @@ com.google.protobuf:protoc:${protobuf.version} - ${project.basedir}/src/main/proto + ${project.basedir}/src/main/proto/event diff --git a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/VesEventDomain.kt b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/VesEventDomain.kt new file mode 100644 index 00000000..3e99cdc8 --- /dev/null +++ b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/VesEventDomain.kt @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START======================================================= + * dcaegen2-collectors-veshv + * ================================================================================ + * Copyright (C) 2018 NOKIA + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * 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. + * ============LICENSE_END========================================================= + */ +package org.onap.dcae.collectors.veshv.domain + +enum class VesEventDomain { + FAULT, + HEARTBEAT, + MEASUREMENT, + MOBILE_FLOW, + OTHER, + PNFREGISTRATION, + SIP_SIGNALING, + STATE_CHANGE, + SYSLOG, + THRESHOLD_CROSSING_ALERT, + VOICE_QUALITY, + HVMEAS +} diff --git a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/validation.kt b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/validation.kt index 91c75459..339a652c 100644 --- a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/validation.kt +++ b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/validation.kt @@ -19,17 +19,18 @@ */ package org.onap.dcae.collectors.veshv.domain -import org.onap.ves.VesEventV5 +import org.onap.ves.VesEventOuterClass val headerRequiredFieldDescriptors = listOf( "version", - "eventName", "domain", - "eventId", - "sourceName", - "reportingEntityName", + "sequence", "priority", - "startEpochMicrosec", + "eventId", + "eventName", "lastEpochMicrosec", - "sequence") - .map { fieldName -> VesEventV5.VesEvent.CommonEventHeader.getDescriptor().findFieldByName(fieldName) } \ No newline at end of file + "startEpochMicrosec", + "reportingEntityName", + "sourceName", + "vesEventListenerVersion") + .map { fieldName -> VesEventOuterClass.CommonEventHeader.getDescriptor().findFieldByName(fieldName) } diff --git a/hv-collector-domain/src/main/proto/HVRanMeasFields-v5.proto b/hv-collector-domain/src/main/proto/HVRanMeasFields-v5.proto deleted file mode 100644 index 5121f0eb..00000000 --- a/hv-collector-domain/src/main/proto/HVRanMeasFields-v5.proto +++ /dev/null @@ -1,54 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * dcaegen2-collectors-veshv - * ================================================================================ - * Copyright (C) 2018 NOKIA - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * 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. - * ============LICENSE_END========================================================= - */ -syntax = "proto3"; -package org.onap.ves; - -// Definition for RTPM - -message HVRanMeasFields { - message HVRanMeasPayload { - message PMObject { - message HVRanMeas { - uint32 measurement_id = 1; - repeated uint32 counter_subid = 2; - repeated sint64 counter_value = 3; - repeated uint32 missing_counter_subid = 4; - bool suspectFlagIncomplete = 5; // (some is data missing due to internal error) - bool suspectFlagOutOfSync = 6; // (source time not aligned) - } - - string uri = 1; // monitored object URI - repeated HVRanMeas hvRanMeas = 2; // performance counters grouped by measurement types - } - repeated PMObject pmObject = 1; - } - - message AdditionalField { - string name = 1; - string value = 2; - } - - string hvRanMeasFieldsVersion = 1; // version of HVRanMeasFields message - uint32 period_ms = 2; // period configured for reporting the data in milliseconds - string timezone = 3; // timezone of Network Function sending the data - string pmDictionaryVsn = 4; // vendor name + schema version E.g. NOKIA_LN7.0, uniquely identify the relevant PM dictionary - HVRanMeasPayload hvRanMeasPayload = 5; // objects being monitored - repeated AdditionalField additionalFields = 6; // array of name-value pairs if needed -} \ No newline at end of file diff --git a/hv-collector-domain/src/main/proto/VesEvent-v5.proto b/hv-collector-domain/src/main/proto/VesEvent-v5.proto deleted file mode 100644 index 340133b2..00000000 --- a/hv-collector-domain/src/main/proto/VesEvent-v5.proto +++ /dev/null @@ -1,88 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * dcaegen2-collectors-veshv - * ================================================================================ - * Copyright (C) 2018 NOKIA - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * 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. - * ============LICENSE_END========================================================= - */ -syntax = "proto3"; -package org.onap.ves; - -message VesEvent { - - // VES CommonEventHeader adapted to GPB (Google Protocol Buffers) - // Source: https://git.opnfv.org/ves/tree/tests/docs/ves_data_model.json - // 2017-05-13 Align with VES 5.0 schema. - // blob: ca948ff67e8a2de4e2a47cffc4d4d2893170ab76 - - message CommonEventHeader { - string version = 1; // required, "version of the event header" - enum Domain { - DOMAIN_UNDEFINED = 0; - FAULT = 1; - HEARTBEAT = 2; - MEASUREMENTS_FOR_VF_SCALING = 3; - MOBILE_FLOW = 4; - SIP_SIGNALING = 5; - STATE_CHANGE = 6; - SYSLOG = 7; - THRESHOLD_CROSSING_ALERT = 8; - VOICE_QUALITY = 9; - OTHER = 10; - HVRANMEAS = 11; - } - Domain domain = 2; // required, "the eventing domain associated with the event" [map to string] - - uint32 sequence = 3; // required, "ordering of events communicated by an event source instance or 0 if not needed" - - enum Priority { - PRIORITY_UNDEFINED = 0; - HIGH = 1; - MEDIUM = 2; - NORMAL = 3; - LOW = 4; - } - Priority priority = 4; // required, "processing priority" - - string eventId = 5; // required, "event key that is unique to the event source" - string eventName = 6; // required, "unique event name" - string eventType = 7; // "for example - applicationVnf, guestOS, hostOS, platform" - - uint64 lastEpochMicrosec = 8; // required, "the latest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds" - uint64 startEpochMicrosec = 9; // required, "the earliest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds" - - string nfNamingCode = 10; // "4 character network function type, aligned with vnf naming standards" - string nfcNamingCode = 11; // "3 character network function component type, aligned with vfc naming standards" - - string reportingEntityId = 12; // "UUID identifying the entity reporting the event, for example an OAM VM; must be populated by the ATT enrichment process" - bytes reportingEntityName = 13; // required, "name of the entity reporting the event, for example, an EMS name; may be the same as sourceName" - bytes sourceId = 14; // "UUID identifying the entity experiencing the event issue; must be populated by the ATT enrichment process" - string sourceName = 15; // required, "name of the entity experiencing the event issue" - - reserved "InternalHeaderFields"; // "enrichment fields for internal VES Event Listener service use only, not supplied by event sources" - reserved 100; - } - - CommonEventHeader commonEventHeader = 1; - - oneof eventFields // required, payload, each high-volume domain has its specific GPB schema - { - bytes hvRanMeasFields = 2; // if domain==HVRANMEAS, GPB schema: HVRanMeasFields.proto - } -} - -message VesEventList { - repeated VesEvent vesEvent = 1; -} diff --git a/hv-collector-domain/src/main/proto/event/VesEvent.proto b/hv-collector-domain/src/main/proto/event/VesEvent.proto new file mode 100644 index 00000000..54a6d149 --- /dev/null +++ b/hv-collector-domain/src/main/proto/event/VesEvent.proto @@ -0,0 +1,74 @@ +/* + * ============LICENSE_START======================================================= + * dcaegen2-collectors-veshv + * ================================================================================ + * Copyright (C) 2018 NOKIA + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * 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. + * ============LICENSE_END========================================================= + */ +syntax = "proto3"; +package org.onap.ves; + +message VesEvent { + CommonEventHeader commonEventHeader = 1; // required + + oneof eventFields // required, payload + { + // each new high-volume domain can add an entry for its own GPB message + // the field can be opaque (bytes) to allow decoding the payload in a separate step + bytes hvMeasFields = 2; // for domain==HVMEAS, GPB message: HVMeasFields + } +} + +// VES CommonEventHeader adapted to GPB (Google Protocol Buffers) +// Aligned with VES 7.0.1 schema, and extending to hvMeas Domain + +message CommonEventHeader { + string version = 1; // required, "version of the gpb common event header" + string domain = 2; // required, "the eventing domain associated with the event", allowed values: + // FAULT, HEARTBEAT, MEASUREMENT, MOBILE_FLOW, OTHER, PNFREGISTRATION, SIP_SIGNALING, + // STATE_CHANGE, SYSLOG, THRESHOLD_CROSSING_ALERT, VOICE_QUALITY, HVMEAS + + uint32 sequence = 3; // required, "ordering of events communicated by an event source instance or 0 if not needed" + + enum Priority { + PRIORITY_NOT_PROVIDED = 0; + HIGH = 1; + MEDIUM = 2; + NORMAL = 3; + LOW = 4; + } + Priority priority = 4; // required, "processing priority" + + string eventId = 5; // required, "event key that is unique to the event source" + string eventName = 6; // required, "unique event name" + string eventType = 7; // "for example - guest05, platform" + + uint64 lastEpochMicrosec = 8; // required, "the latest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds" + uint64 startEpochMicrosec = 9; // required, "the earliest unix time aka epoch time associated with the event from any component--as microseconds elapsed since 1 Jan 1970 not including leap seconds" + + string nfNamingCode = 10; // "4 character network function type, aligned with vnf naming standards" + string nfcNamingCode = 11; // "3 character network function component type, aligned with vfc naming standards" + string nfVendorName = 12; // " Vendor Name providing the nf " + + bytes reportingEntityId = 13; // "UUID identifying the entity reporting the event, for example an OAM VM; must be populated by the ATT enrichment process" + string reportingEntityName = 14; // required, "name of the entity reporting the event, for example, an EMS name; may be the same as sourceName should match A&AI entry" + bytes sourceId = 15; // "UUID identifying the entity experiencing the event issue; must be populated by the ATT enrichment process" + string sourceName = 16; // required, "name of the entity experiencing the event issued use A&AI entry" + string timeZoneOffset = 17; // "Offset to GMT to indicate local time zone for the device" + string vesEventListenerVersion = 18; // required, "Version of the VesEvent Listener" + + reserved "InternalHeaderFields"; // "enrichment fields for internal VES Event Listener service use only, not supplied by event sources" + reserved 100; +} diff --git a/hv-collector-domain/src/main/proto/measurements/HVMeasFields.proto b/hv-collector-domain/src/main/proto/measurements/HVMeasFields.proto new file mode 100644 index 00000000..9a8582d5 --- /dev/null +++ b/hv-collector-domain/src/main/proto/measurements/HVMeasFields.proto @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START======================================================= + * dcaegen2-collectors-veshv + * ================================================================================ + * Copyright (C) 2018 NOKIA + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * 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. + * ============LICENSE_END========================================================= + */ +syntax = "proto3"; +package org.onap.ves; +import "MeasDataCollection.proto"; // for 3GPP PM format + +message HVMeasFields +{ + string hvMeasFieldsVersion = 1; + measDataCollection.MeasDataCollection measDataCollection = 2; + // From 3GPP TS 28.550 + // Informative: mapping between similar header fields (format may be different) + // 3GPP MeasStreamHeader ONAP/VES CommonEventHeader + // senderName sourceName + // senderType nfNamingCode + nfcNamingCode + // vendorName nfVendorName + // collectionBeginTime startEpochMicrosec + // timestamp lastEpochMicrosec + repeated HashMap eventAddlFlds = 3; // optional per-event data +} + +message HashMap +{ + string name = 1; + string value = 2; +} \ No newline at end of file diff --git a/hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto b/hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto new file mode 100644 index 00000000..472dcc43 --- /dev/null +++ b/hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto @@ -0,0 +1,104 @@ +/* + * ============LICENSE_START======================================================= + * dcaegen2-collectors-veshv + * ================================================================================ + * Copyright (C) 2018 NOKIA + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * 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. + * ============LICENSE_END========================================================= + */ +syntax = "proto3"; +package measDataCollection; + +// Definition for RTPM, structure aligned with 3GPP PM format optimized for RTPM delivery pre-standard TS 28.550 V1.2.2 (2018-08). +// Some field details are taken from 3GPP TS 32.436 V15.0.0 (2018-06) ASN.1 file. +// Note (2018-08): work is in progress for 3GPP TS 28.550 to specify PM streaming format. Changes will be made, if needed, to align with final version. +// Differences/additions to 3GPP TS 28.550 are marked with "%%". + +message MeasDataCollection // top-level message +{ + MeasHeader measHeader = 1; + repeated MeasData measData = 2; // %%: use a single instance for RTPM + MeasFooter measFooter = 3; +} + +message MeasHeader +{ + string streamFormatVersion = 1; + string senderName = 2; + string senderType = 3; + string vendorName = 4; + string collectionBeginTime = 5; // in ASN.1 GeneralizedTime format (subset of ISO 8601 basic format) +} + +message MeasData +{ + string measuredEntityId = 1; // DN as per 3GPP TS 32.300 + string measuredEntityUserName = 2; // network function User Name + string measuredEntitySoftwareVersion = 3; + uint32 granularityPeriod = 4; // in seconds, %% moved from MeasInfo (single reporting period per event) + repeated string measObjInstIdList = 5; // %%: optional, monitored object LDNs as per 3GPP TS 32.300 and 3GPP TS 32.432 + repeated MeasInfo measInfo = 6; +} + + +message MeasInfo +{ + oneof MeasInfoId { // measurement group identifier + uint32 iMeasInfoId = 1; // identifier as integer (%%: more compact) + string measInfoId = 2; // identifier as string (more generic) + } + + oneof MeasTypes { // measurement identifiers associated with the measurement results + IMeasTypes iMeasTypes = 3; // identifiers as integers (%%: more compact) + SMeasTypes measTypes = 4; // identifiers as strings (more generic) + } + // Needed only because GPB does not support repeated fields directly inside 'oneof' + message IMeasTypes { repeated uint32 iMeasType = 1; } + message SMeasTypes { repeated string measType = 1; } + + string jobIdList = 5; + repeated MeasValue measValues = 6; // performance measurements grouped by measurement groups +} + +message MeasValue +{ + oneof MeasObjInstId { // monitored object LDN as per 3GPP TS 32.300 and 3GPP TS 32.432 + string measObjInstId = 1; // LDN itself + uint32 measObjInstIdListIdx = 2; // %%: index into measObjInstIdList + } + repeated MeasResult measResults = 3; + bool suspectFlag = 4; + repeated nameValue measObjAddlFlds = 5; // %%: optional per-object data +} + +message MeasResult +{ + uint32 p = 1; // Optional index in the MeasTypes array + oneof xValue { + sint64 iValue = 2; + double rValue = 3; + bool isNull = 4; + } +} + +message MeasFooter +{ + string timestamp = 1; // in ASN.1 GeneralizedTime format, a better name would be "collectionEndTime" +} + +message nameValue // %%: vendor-defined name-value pair +{ + string name = 1; + string value = 2; +} \ No newline at end of file diff --git a/hv-collector-domain/src/test/kotlin/org/onap/dcae/collectors/veshv/domain/WireFrameCodecsTest.kt b/hv-collector-domain/src/test/kotlin/org/onap/dcae/collectors/veshv/domain/WireFrameCodecsTest.kt index fa63c36e..b992d530 100644 --- a/hv-collector-domain/src/test/kotlin/org/onap/dcae/collectors/veshv/domain/WireFrameCodecsTest.kt +++ b/hv-collector-domain/src/test/kotlin/org/onap/dcae/collectors/veshv/domain/WireFrameCodecsTest.kt @@ -22,7 +22,6 @@ package org.onap.dcae.collectors.veshv.domain import arrow.core.Either import io.netty.buffer.ByteBuf import io.netty.buffer.Unpooled -import io.netty.buffer.UnpooledByteBufAllocator import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.ObjectAssert import org.jetbrains.spek.api.Spek -- cgit 1.2.3-korg