object Main
The metering report validation app can be used to verify that a provided metering report is consistent with
a check
section within the report. When the report is created the check section is populated with a digest
and a scheme that was used in the creation of that digest. Different schemes may be used by different
release variants (e.g. community verses enterprise) and for different points in time.
The app takes as parameters a directory that contains one file for each supported scheme and the report file to be verified. The scheme files need to contain JSON with fields for the scheme name digest algorithm and encoded key. For example:
{ "scheme": "community-2021", "algorithm": "HmacSHA256", "encoded": "ifKEd83-fAvOBTXnGjIVfesNzmWFKpo_35zpUnXEsg=" }
Verification works by inspecting the scheme referenced in the report file and then checking that the recalculated digest matches that provided in the file.
Usage: metering-verification-app <directory> <report>
- Alphabetic
- By Inheritance
- Main
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- abstract class Code extends ExitCode
- final case class CodeDetail(code: String, detail: String) extends ExitCode with Product with Serializable
- final case class ErrUsage(app: String) extends Code with Product with Serializable
- trait ExitCode extends AnyRef
- type ExitCodeOr[T] = Either[ExitCode, T]
- final case class FailedToReadReport(report: String, t: Throwable) extends Code with Product with Serializable
- final case class FailedVerification(status: VerificationStatus) extends Code with Product with Serializable
- final case class NoKeys(dir: String) extends Code with Product with Serializable
- final case class NotDirectory(dir: String) extends Code with Product with Serializable
- final case class NotFile(report: String) extends Code with Product with Serializable
- final case class NotKeyFile(path: Path, t: Throwable) extends Code with Product with Serializable
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- val OK: ExitCode
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def main(args: Array[String]): Unit
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])