Skip to content

Kelvin Resource Name Registry

Overview

The Kelvin Resource Name (KRN) Registry serves as the centralized system for uniquely identifying various types of resources within the Kelvin Platform. It is conceptually similar to Uniform Resource Names (URN) or Amazon Resource Names (ARN), tailored for Kelvin's use.

Specification

A KRN must conform to the following criteria:

  • Format: A KRN should adhere to a specific URN-based format that starts with krn: followed by a Namespace Identifier (NID) and a Namespace-Specific String (NSS), separated by colons.
  • Example for Data Streams: krn:ad:air-conditioner/temperature
  • Example for Workloads: krn:wl:my-node/modbus-bridge-1
  • Validity: It must be a valid URN scheme URI, which means it has to contain at least a NID and an NSS.
  • Syntax: The KRN should follow a subset of the URN's ABNF syntax rules, as outlined below:

    makefileCopy codekrn           = "krn" ":" NID ":" NSS
    NID           = (alphanum) 0*30(ldh) (alphanum)
    NSS           = pchar *(pchar / "/")
    
    * Documentation: All NIDs used in KRN must be documented, along with the NSS specification.

Definitions

Asset Custom Action

aca-krn = "krn" ":" "aca" ":" asset "/" action

asset = NAME
action = NAME-V2

Examples

krn:aca:air-conditioner-1/email
krn:aca:beam-pump/Webhook

Action

action-krn = "krn" ":" "action" ":" email

action     = NAME-V2

Examples

krn:action:email
krn:action:Webhook

Asset Data Stream

ad-krn = "krn" ":" "ad" ":" asset "/" datastream

asset       = NAME
datastream = NAME

Examples

krn:ad:air-conditioner-1/temp-setpoint
krn:ad:beam-pump/casing.temperature
krn:ad:centrifugal-pump-02/oee
krn:ad:centrifugal-pump-02/failure_quotient

Asset Parameter

ap-krn = "krn" ":" "ap" ":" asset "/" parameter

asset  = NAME
parameter = NAME

Examples

krn:ap:air-conditioner-1/closed_loop

App

app-krn = "krn" ":" "app" ":" app

app     = NAME

Examples

krn:app:smart-pcp
krn:app:pvc

App Parameter

app-parameter-krn = "krn" ":" "app-paramter" ":" app ":" parameter

app       = NAME
parameter = NAME

Examples

krn:app-parameter:my-app:my-param
krn:app-parameter:smart-pcp:closed_loop

App Version

appversion-krn = "krn" ":" "appversion" ":" app "/" version

app     = NAME
version = NAME

Examples

krn:appversion:smart-pcp/2.0.0
krn:appversion:pvc/3.0.1

Asset

asset-krn = "krn" ":" "asset" ":" asset

asset  = NAME

Examples

krn:asset:air-conditioner-1
krn:asset:beam-pump

Asset Type

asset-type-krn = "krn" ":" "asset-type" "/" asset-type

asset-type  = NAME

Examples

krn:asset-type/beam-pump

Data Stream

datastream-krn = "krn" ":" "datastream" ":" datastream

datastream  = NAME

Examples

krn:datastream:temp-setpoint
krn:datastream:casing.temperature
krn:datastream:oee

Data Quality - Asset Data Stream

dqad-krn = "krn" ":" "dqad" ":" data-quality ":" asset "/" datastream

asset        = NAME
datastream   = NAME
data-quality = NAME

Examples

krn:dqad:kelvin_timestamp_anomaly:pcp_01/gas_flow 
krn:dqad:kelvin_out_of_range_detection:pcp_01/gas_flow

Data Quality - Asset

dqasset-krn = "krn" ":" "dqasset" ":" data-quality ":" asset

asset        = NAME
data-quality = NAME

Examples

krn:dqasset:asset_score:pcp01

Job

job-krn = "krn" ":" "job" ":" job "/" job-run-id

job = NAME
job-run-id = 1*(DIGIT / ALPHA / "_" / "-")

Examples

krn:job:parameters-schedule-worker/1257897347822083

Recommendation

recommendation-krn = "krn" ":" "recommendation" ":" recommendation-id

recommendation-id  = UUID

Examples

krn:recommendation:86a425b4-b43f-4989-a38f-b18f6b3d1ec7

Schedule

schedule-krn = "krn" ":" "schedule" ":" schedule

schedule = USERNAME

Examples

krn:schedule:6830a7d3-bcf3-4a64-8126-eaaeeca86676

Service Account

srv-acc-krn = "krn" ":" "srv-acc" ":" account-name

account-name = USERNAME

Examples

krn:srv-acc:node-client-my-edge-cluster

System

system-krn = "krn" ":" "system" ":" system_name

system_name = NAME-V2

Examples

krn:system:kelvin

User

user-krn = "krn" ":" "user" ":" user

user  = USERNAME

Examples

krn:user:me@example.com

Workload

wl-krn = "krn" ":" "wl" ":" cluster "/" workload

cluster  = DNS-SAFE
workload = DNS-SAFE

Examples

krn:wl:my-node/temp-adjuster-1

Workload App Version

wlappv-krn = "krn" ":" "wlappv" ":" wl-krn ":" appversion-krn

Examples

krn:wlappv:cluster_name/workload_name:app_name/app_version
krn:wlappv:my-node/pvc-r312:pvc/1.0.0

Common Components

Component Regex
DNS-SAFE-NAME ^[a-z]([-a-z0-9]*[a-z0-9])?$
NAME ^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$
NAME-V2 ^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$
SEMVER See Semantic Versioning
USERNAME ([-a-zA-Z0-9()+,.:=@;$_!*'&~\/]|%[0-9a-f]{2})+
UUID ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$