org.jetbrains.kotlin.statistics.metrics.MetricPolicies.kt Maven / Gradle / Ivy
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.statistics.metrics
import org.jetbrains.kotlin.statistics.ValueAnonymizer
import org.jetbrains.kotlin.statistics.anonymizeComponentVersion
import org.jetbrains.kotlin.statistics.sha256
enum class StringOverridePolicy: IMetricContainerFactory {
OVERRIDE {
override fun newMetricContainer(): IMetricContainer = OverrideMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = OverrideMetricContainer(state)
},
OVERRIDE_VERSION_IF_NOT_SET {
override fun newMetricContainer(): IMetricContainer = OverrideVersionMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = OverrideVersionMetricContainer(state)
},
CONCAT {
override fun newMetricContainer(): IMetricContainer = ConcatMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = ConcatMetricContainer(state.split(ConcatMetricContainer.SEPARATOR))
}
//Should be useful counting container?
}
private fun applyIfLong(v: String, action: (Long) -> IMetricContainer) : IMetricContainer? {
val longVal = v.toLongOrNull()
return if (longVal == null) {
null
} else {
action(longVal)
}
}
enum class NumberOverridePolicy: IMetricContainerFactory {
OVERRIDE {
override fun newMetricContainer(): IMetricContainer = OverrideMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = applyIfLong(state) {
OverrideMetricContainer(it)
}
},
SUM {
override fun newMetricContainer(): IMetricContainer = SumMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = applyIfLong(state) {
SumMetricContainer(it)
}
},
AVERAGE {
override fun newMetricContainer(): IMetricContainer = AverageMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = applyIfLong(state) {
AverageMetricContainer(it)
}
}
}
enum class BooleanOverridePolicy: IMetricContainerFactory {
OVERRIDE {
override fun newMetricContainer(): IMetricContainer = OverrideMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = OverrideMetricContainer(state.toBoolean())
},
OR {
override fun newMetricContainer(): IMetricContainer = OrMetricContainer()
override fun fromStringRepresentation(state: String): IMetricContainer? = OrMetricContainer(state.toBoolean())
}
// may be add disctribution counter metric container
}
enum class BooleanAnonymizationPolicy : ValueAnonymizer {
SAFE {
override fun anonymize(t: Boolean) = t
}
}
enum class StringAnonymizationPolicy : ValueAnonymizer {
SAFE {
override fun anonymize(t: String) = t
},
ANONYMIZE_IN_IDE {
override fun anonymize(t: String) = t
override fun anonymizeOnIdeSize() = true
},
SHA_256 {
override fun anonymize(t: String) = sha256(t)
},
COMPONENT_VERSION {
override fun anonymize(t: String) = anonymizeComponentVersion(t)
}
}
enum class NumberAnonymizationPolicy : ValueAnonymizer {
SAFE {
override fun anonymize(t: Long) = t
},
RANDOM_10_PERCENT {
override fun anonymize(t: Long) = (t + t * 0.1 * Math.random()).toLong()
},
RANDOM_01_PERCENT {
override fun anonymize(t: Long) = (t + t * 0.01 * Math.random()).toLong()
}
}