All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.nemerosa.ontrack.extension.elastic.metrics.ECSEntry.kt Maven / Gradle / Ivy

package net.nemerosa.ontrack.extension.elastic.metrics

import com.fasterxml.jackson.annotation.JsonProperty
import org.apache.commons.codec.digest.DigestUtils
import java.time.LocalDateTime

/**
 * See https://www.elastic.co/guide/en/ecs/current/index.html
 */
data class ECSEntry(
    @JsonProperty("@timestamp")
    val timestamp: LocalDateTime,
    val event: ECSEvent,
    val labels: Map? = null,
    val tags: List? = null,
    /**
     * Specific entries for Ontrack (non-ECS)
     */
    @JsonProperty("Ontrack")
    val ontrack: Map? = null,
) {
    /**
     * Computing a unique ID for this entry
     */
    fun computeId(): String {
        val prefix: String = DigestUtils.md5Hex(event.category)
        val base = "$event-${labels?.toSortedMap()}-${tags?.sorted()}-$timestamp"
        val hashedBase = DigestUtils.sha1Hex(base)
        return "$prefix-$hashedBase"
    }
}

data class ECSEvent(
    val kind: ECSEventKind = ECSEventKind.metric,
    val category: String,
    val type: String? = null,
    val outcome: ECSEventOutcome? = null,
    val action: String? = null,
    val dataset: String? = null,
    val duration: Long? = null,
    val module: String? = null,
)

enum class ECSEventKind {
    metric,
}

enum class ECSEventOutcome {
    failure,
    success,
    unknown,
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy