grafana / grafana-plugin-sdk-go

A Go SDK for building backend plugins for Grafana
Apache License 2.0
199 stars 60 forks source link

Add Unit Constants Library to SDK #207

Closed kylebrandt closed 5 months ago

kylebrandt commented 4 years ago

What would you like to be added:

Make https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/valueFormats/categories.ts#L24 available as Go constants in a pacakage. These can then be used for consistent referencing.

Some JSON from types:

[
  {
    "name": "Misc",
    "formats": [
      { "name": "none", "id": "none"},
      { "name": "short", "id": "short"},
      { "name": "percent (0-100)", "id": "percent"},
      { "name": "percent (0.0-1.0)", "id": "percentunit"},
      { "name": "Humidity (%H)", "id": "humidity"},
      { "name": "decibel", "id": "dB"},
      { "name": "hexadecimal (0x)", "id": "hex0x"},
      { "name": "hexadecimal", "id": "hex"},
      { "name": "scientific notation", "id": "sci"},
      { "name": "locale format", "id": "locale"},
      { "name": "Pixels", "id": "pixel"}
    ]
  },
  {
    "name": "Acceleration",
    "formats": [
      { "name": "Meters/sec²", "id": "accMS2"},
      { "name": "Feet/sec²", "id": "accFS2"},
      { "name": "G unit", "id": "accG"}
    ]
  },
  {
    "name": "Angle",
    "formats": [
      { "name": "Degrees (°)", "id": "degree"},
      { "name": "Radians", "id": "radian"},
      { "name": "Gradian", "id": "grad"},
      { "name": "Arc Minutes", "id": "arcmin"},
      { "name": "Arc Seconds", "id": "arcsec"}
    ]
  },
  {
    "name": "Area",
    "formats": [
      { "name": "Square Meters (m²)", "id": "areaM2"},
      { "name": "Square Feet (ft²)", "id": "areaF2"},
      { "name": "Square Miles (mi²)", "id": "areaMI2"}
    ]
  },
  {
    "name": "Computation",
    "formats": [
      { "name": "FLOP/s", "id": "flops"},
      { "name": "MFLOP/s", "id": "mflops"},
      { "name": "GFLOP/s", "id": "gflops"},
      { "name": "TFLOP/s", "id": "tflops"},
      { "name": "PFLOP/s", "id": "pflops"},
      { "name": "EFLOP/s", "id": "eflops"},
      { "name": "ZFLOP/s", "id": "zflops"},
      { "name": "YFLOP/s", "id": "yflops"}
    ]
  },
  {
    "name": "Concentration",
    "formats": [
      { "name": "parts-per-million (ppm)", "id": "ppm"},
      { "name": "parts-per-billion (ppb)", "id": "conppb"},
      { "name": "nanogram per cubic meter (ng/m³)", "id": "conngm3"},
      { "name": "nanogram per normal cubic meter (ng/Nm³)", "id": "conngNm3"},
      { "name": "microgram per cubic meter (μg/m³)", "id": "conμgm3"},
      { "name": "microgram per normal cubic meter (μg/Nm³)", "id": "conμgNm3"},
      { "name": "milligram per cubic meter (mg/m³)", "id": "conmgm3"},
      { "name": "milligram per normal cubic meter (mg/Nm³)", "id": "conmgNm3"},
      { "name": "gram per cubic meter (g/m³)", "id": "congm3"},
      { "name": "gram per normal cubic meter (g/Nm³)", "id": "congNm3"},
      { "name": "milligrams per decilitre (mg/dL)", "id": "conmgdL"},
      { "name": "millimoles per litre (mmol/L)", "id": "conmmolL"}
    ]
  },
  {
    "name": "Currency",
    "formats": [
      { "name": "Dollars ($)", "id": "currencyUSD"},
      { "name": "Pounds (£)", "id": "currencyGBP"},
      { "name": "Euro (€)", "id": "currencyEUR"},
      { "name": "Yen (¥)", "id": "currencyJPY"},
      { "name": "Rubles (₽)", "id": "currencyRUB"},
      { "name": "Hryvnias (₴)", "id": "currencyUAH"},
      { "name": "Real (R$)", "id": "currencyBRL"},
      { "name": "Danish Krone (kr)", "id": "currencyDKK"},
      { "name": "Icelandic Króna (kr)", "id": "currencyISK"},
      { "name": "Norwegian Krone (kr)", "id": "currencyNOK"},
      { "name": "Swedish Krona (kr)", "id": "currencySEK"},
      { "name": "Czech koruna (czk)", "id": "currencyCZK"},
      { "name": "Swiss franc (CHF)", "id": "currencyCHF"},
      { "name": "Polish Złoty (PLN)", "id": "currencyPLN"},
      { "name": "Bitcoin (฿)", "id": "currencyBTC"},
      { "name": "Milli Bitcoin (฿)", "id": "currencymBTC"},
      { "name": "Micro Bitcoin (฿)", "id": "currencyμBTC"},
      { "name": "South African Rand (R)", "id": "currencyZAR"},
      { "name": "Indian Rupee (₹)", "id": "currencyINR"},
      { "name": "South Korean Won (₩)", "id": "currencyKRW"}
    ]
  },
  {
    "name": "Data (IEC)",
    "formats": [
      { "name": "bits(IEC)", "id": "bits"},
      { "name": "bytes(IEC)", "id": "bytes"},
      { "name": "kibibytes", "id": "kbytes"},
      { "name": "mebibytes", "id": "mbytes"},
      { "name": "gibibytes", "id": "gbytes"},
      { "name": "tebibytes", "id": "tbytes"},
      { "name": "pebibytes", "id": "pbytes"}
    ]
  },
  {
    "name": "Data (Metric)",
    "formats": [
      { "name": "bits(Metric)", "id": "decbits"},
      { "name": "bytes(Metric)", "id": "decbytes"},
      { "name": "kilobytes", "id": "deckbytes"},
      { "name": "megabytes", "id": "decmbytes"},
      { "name": "gigabytes", "id": "decgbytes"},
      { "name": "terabytes", "id": "dectbytes"},
      { "name": "petabytes", "id": "decpbytes"}
    ]
  },
  {
    "name": "Data Rate",
    "formats": [
      { "name": "packets/sec", "id": "pps"},
      { "name": "bits/sec", "id": "bps"},
      { "name": "bytes/sec", "id": "Bps"},
      { "name": "kilobytes/sec", "id": "KBs"},
      { "name": "kilobits/sec", "id": "Kbits"},
      { "name": "megabytes/sec", "id": "MBs"},
      { "name": "megabits/sec", "id": "Mbits"},
      { "name": "gigabytes/sec", "id": "GBs"},
      { "name": "gigabits/sec", "id": "Gbits"},
      { "name": "terabytes/sec", "id": "TBs"},
      { "name": "terabits/sec", "id": "Tbits"},
      { "name": "petabytes/sec", "id": "PBs"},
      { "name": "petabits/sec", "id": "Pbits"}
    ]
  },
  {
    "name": "Date & Time",
    "formats": [
      { "name": "YYYY-MM-DD HH:mm:ss", "id": "dateTimeAsIso"},
      { "name": "MM/DD/YYYY h:mm:ss a", "id": "dateTimeAsUS"},
      { "name": "From Now", "id": "dateTimeFromNow"}
    ]
  },
  {
    "name": "Energy",
    "formats": [
      { "name": "Watt (W)", "id": "watt"},
      { "name": "Kilowatt (kW)", "id": "kwatt"},
      { "name": "Megawatt (MW)", "id": "megwatt"},
      { "name": "Gigawatt (GW)", "id": "gwatt"},
      { "name": "Milliwatt (mW)", "id": "mwatt"},
      { "name": "Watt per square meter (W/m²)", "id": "Wm2"},
      { "name": "Volt-ampere (VA)", "id": "voltamp"},
      { "name": "Kilovolt-ampere (kVA)", "id": "kvoltamp"},
      { "name": "Volt-ampere reactive (var)", "id": "voltampreact"},
      { "name": "Kilovolt-ampere reactive (kvar)", "id": "kvoltampreact"},
      { "name": "Watt-hour (Wh)", "id": "watth"},
      { "name": "Watt-hour per Kilogram (Wh/kg)", "id": "watthperkg"},
      { "name": "Kilowatt-hour (kWh)", "id": "kwatth"},
      { "name": "Kilowatt-min (kWm)", "id": "kwattm"},
      { "name": "Ampere-hour (Ah)", "id": "amph"},
      { "name": "Kiloampere-hour (kAh)", "id": "kamph"},
      { "name": "Milliampere-hour (mAh)", "id": "mamph"},
      { "name": "Joule (J)", "id": "joule"},
      { "name": "Electron volt (eV)", "id": "ev"},
      { "name": "Ampere (A)", "id": "amp"},
      { "name": "Kiloampere (kA)", "id": "kamp"},
      { "name": "Milliampere (mA)", "id": "mamp"},
      { "name": "Volt (V)", "id": "volt"},
      { "name": "Kilovolt (kV)", "id": "kvolt"},
      { "name": "Millivolt (mV)", "id": "mvolt"},
      { "name": "Decibel-milliwatt (dBm)", "id": "dBm"},
      { "name": "Ohm (Ω)", "id": "ohm"},
      { "name": "Kiloohm (kΩ)", "id": "kohm"},
      { "name": "Megaohm (MΩ)", "id": "Mohm"},
      { "name": "Farad (F)", "id": "farad"},
      { "name": "Microfarad (µF)", "id": "µfarad"},
      { "name": "Nanofarad (nF)", "id": "nfarad"},
      { "name": "Picofarad (pF)", "id": "pfarad"},
      { "name": "Femtofarad (fF)", "id": "ffarad"},
      { "name": "Henry (H)", "id": "henry"},
      { "name": "Millihenry (mH)", "id": "mhenry"},
      { "name": "Microhenry (µH)", "id": "µhenry"},
      { "name": "Lumens (Lm)", "id": "lumens"}
    ]
  },
  {
    "name": "Flow",
    "formats": [
      { "name": "Gallons/min (gpm)", "id": "flowgpm"},
      { "name": "Cubic meters/sec (cms)", "id": "flowcms"},
      { "name": "Cubic feet/sec (cfs)", "id": "flowcfs"},
      { "name": "Cubic feet/min (cfm)", "id": "flowcfm"},
      { "name": "Litre/hour", "id": "litreh"},
      { "name": "Litre/min (L/min)", "id": "flowlpm"},
      { "name": "milliLitre/min (mL/min)", "id": "flowmlpm"},
      { "name": "Lux (lx)", "id": "lux"}
    ]
  },
  {
    "name": "Force",
    "formats": [
      { "name": "Newton-meters (Nm)", "id": "forceNm"},
      { "name": "Kilonewton-meters (kNm)", "id": "forcekNm"},
      { "name": "Newtons (N)", "id": "forceN"},
      { "name": "Kilonewtons (kN)", "id": "forcekN"}
    ]
  },
  {
    "name": "Hash Rate",
    "formats": [
      { "name": "hashes/sec", "id": "Hs"},
      { "name": "kilohashes/sec", "id": "KHs"},
      { "name": "megahashes/sec", "id": "MHs"},
      { "name": "gigahashes/sec", "id": "GHs"},
      { "name": "terahashes/sec", "id": "THs"},
      { "name": "petahashes/sec", "id": "PHs"},
      { "name": "exahashes/sec", "id": "EHs"}
    ]
  },
  {
    "name": "Mass",
    "formats": [
      { "name": "milligram (mg)", "id": "massmg"},
      { "name": "gram (g)", "id": "massg"},
      { "name": "kilogram (kg)", "id": "masskg"},
      { "name": "metric ton (t)", "id": "masst"}
    ]
  },
  {
    "name": "Length",
    "formats": [
      { "name": "millimeter (mm)", "id": "lengthmm"},
      { "name": "feet (ft)", "id": "lengthft"},
      { "name": "meter (m)", "id": "lengthm"},
      { "name": "kilometer (km)", "id": "lengthkm"},
      { "name": "mile (mi)", "id": "lengthmi"}
    ]
  },
  {
    "name": "Pressure",
    "formats": [
      { "name": "Millibars", "id": "pressurembar"},
      { "name": "Bars", "id": "pressurebar"},
      { "name": "Kilobars", "id": "pressurekbar"},
      { "name": "Pascals", "id": "pressurepa"},
      { "name": "Hectopascals", "id": "pressurehpa"},
      { "name": "Kilopascals", "id": "pressurekpa"},
      { "name": "Inches of mercury", "id": "pressurehg"},
      { "name": "PSI", "id": "pressurepsi"}
    ]
  },
  {
    "name": "Radiation",
    "formats": [
      { "name": "Becquerel (Bq)", "id": "radbq"},
      { "name": "curie (Ci)", "id": "radci"},
      { "name": "Gray (Gy)", "id": "radgy"},
      { "name": "rad", "id": "radrad"},
      { "name": "Sievert (Sv)", "id": "radsv"},
      { "name": "milliSievert (mSv)", "id": "radmsv"},
      { "name": "microSievert (µSv)", "id": "radusv"},
      { "name": "rem", "id": "radrem"},
      { "name": "Exposure (C/kg)", "id": "radexpckg"},
      { "name": "roentgen (R)", "id": "radr"},
      { "name": "Sievert/hour (Sv/h)", "id": "radsvh"},
      { "name": "milliSievert/hour (mSv/h)", "id": "radmsvh"},
      { "name": "microSievert/hour (µSv/h)", "id": "radusvh"}
    ]
  },
  {
    "name": "Rotational Speed",
    "formats": [
      { "name": "Revolutions per minute (rpm)", "id": "rotrpm"},
      { "name": "Hertz (Hz)", "id": "rothz"},
      { "name": "Radians per second (rad/s)", "id": "rotrads"},
      { "name": "Degrees per second (°/s)", "id": "rotdegs"}
    ]
  },
  {
    "name": "Temperature",
    "formats": [
      { "name": "Celsius (°C)", "id": "celsius"},
      { "name": "Fahrenheit (°F)", "id": "fahrenheit"},
      { "name": "Kelvin (K)", "id": "kelvin"}
    ]
  },
  {
    "name": "Time",
    "formats": [
      { "name": "Hertz (1/s)", "id": "hertz"},
      { "name": "nanoseconds (ns)", "id": "ns"},
      { "name": "microseconds (µs)", "id": "µs"},
      { "name": "milliseconds (ms)", "id": "ms"},
      { "name": "seconds (s)", "id": "s"},
      { "name": "minutes (m)", "id": "m"},
      { "name": "hours (h)", "id": "h"},
      { "name": "days (d)", "id": "d"},
      { "name": "duration (ms)", "id": "dtdurationms"},
      { "name": "duration (s)", "id": "dtdurations"},
      { "name": "duration (hh:mm:ss)", "id": "dthms"},
      { "name": "duration (d hh:mm:ss)", "id": "dtdhms"},
      { "name": "Timeticks (s/100)", "id": "timeticks"},
      { "name": "clock (ms)", "id": "clockms"},
      { "name": "clock (s)", "id": "clocks"}
    ]
  },
  {
    "name": "Throughput",
    "formats": [
      { "name": "counts/sec (cps)", "id": "cps"},
      { "name": "ops/sec (ops)", "id": "ops"},
      { "name": "requests/sec (rps)", "id": "reqps"},
      { "name": "reads/sec (rps)", "id": "rps"},
      { "name": "writes/sec (wps)", "id": "wps"},
      { "name": "I/O ops/sec (iops)", "id": "iops"},
      { "name": "counts/min (cpm)", "id": "cpm"},
      { "name": "ops/min (opm)", "id": "opm"},
      { "name": "reads/min (rpm)", "id": "rpm"},
      { "name": "writes/min (wpm)", "id": "wpm"}
    ]
  },
  {
    "name": "Velocity",
    "formats": [
      { "name": "meters/second (m/s)", "id": "velocityms"},
      { "name": "kilometers/hour (km/h)", "id": "velocitykmh"},
      { "name": "miles/hour (mph)", "id": "velocitymph"},
      { "name": "knot (kn)", "id": "velocityknot"}
    ]
  },
  {
    "name": "Volume",
    "formats": [
      { "name": "millilitre (mL)", "id": "mlitre"},
      { "name": "litre (L)", "id": "litre"},
      { "name": "cubic meter", "id": "m3"},
      { "name": "Normal cubic meter", "id": "Nm3"},
      { "name": "cubic decimeter", "id": "dm3"},
      { "name": "gallons", "id": "gallons"}
    ]
  }
]

Some JQ:

$ cat ~/Desktop/units.json | jq  -r '.[] | {name: .name, formats: .formats[]} | .name + "_" + .formats.id + " = \"" + .formats.name + "\""'   | head -n20
Misc_none = "none"
Misc_short = "short"
Misc_percent = "percent (0-100)"
Misc_percentunit = "percent (0.0-1.0)"
Misc_humidity = "Humidity (%H)"
Misc_dB = "decibel"
Misc_hex0x = "hexadecimal (0x)"
Misc_hex = "hexadecimal"
Misc_sci = "scientific notation"
Misc_locale = "locale format"
Misc_pixel = "Pixels"
Acceleration_accMS2 = "Meters/sec²"
Acceleration_accFS2 = "Feet/sec²"
Acceleration_accG = "G unit"
Angle_degree = "Degrees (°)"
Angle_radian = "Radians"
Angle_grad = "Gradian"
Angle_arcmin = "Arc Minutes"
Angle_arcsec = "Arc Seconds"
Area_areaM2 = "Square Meters (m²)"
ryantxu commented 4 years ago

looks good -- but we need the id, and the name as a comment?

// ${format.name}
${name}_${format.id} = "${format.id}"
// duration (hh:mm:ss)
Time_dthms = "dthms"
kylebrandt commented 4 years ago

Want to think about it some more.

Some of these end up repeating the Category etc, for now something to play with.