@grafana/flamegraph
Version:
Grafana flamegraph visualization component
1 lines • 11.1 kB
Source Map (JSON)
{"version":3,"file":"colors.mjs","sources":["../../../src/FlameGraph/colors.ts"],"sourcesContent":["import { scaleLinear } from 'd3';\nimport color from 'tinycolor2';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\n\nimport { ColorSchemeDiff } from '../types';\n\nimport murmurhash3_32_gc from './murmur3';\n\n// Colors taken from pyroscope, they should be from Grafana originally, but I didn't find from where exactly.\nconst packageColors = [\n color({ h: 24, s: 69, l: 60 }),\n color({ h: 34, s: 65, l: 65 }),\n color({ h: 194, s: 52, l: 61 }),\n color({ h: 163, s: 45, l: 55 }),\n color({ h: 211, s: 48, l: 60 }),\n color({ h: 246, s: 40, l: 65 }),\n color({ h: 305, s: 63, l: 79 }),\n color({ h: 47, s: 100, l: 73 }),\n\n color({ r: 183, g: 219, b: 171 }),\n color({ r: 244, g: 213, b: 152 }),\n color({ r: 78, g: 146, b: 249 }),\n color({ r: 249, g: 186, b: 143 }),\n color({ r: 242, g: 145, b: 145 }),\n color({ r: 130, g: 181, b: 216 }),\n color({ r: 229, g: 168, b: 226 }),\n color({ r: 174, g: 162, b: 224 }),\n color({ r: 154, g: 196, b: 138 }),\n color({ r: 242, g: 201, b: 109 }),\n color({ r: 101, g: 197, b: 219 }),\n color({ r: 249, g: 147, b: 78 }),\n color({ r: 234, g: 100, b: 96 }),\n color({ r: 81, g: 149, b: 206 }),\n color({ r: 214, g: 131, b: 206 }),\n color({ r: 128, g: 110, b: 183 }),\n];\n\nconst byValueMinColor = getBarColorByValue(1, 100, 0, 1);\nconst byValueMaxColor = getBarColorByValue(100, 100, 0, 1);\nexport const byValueGradient = `linear-gradient(90deg, ${byValueMinColor} 0%, ${byValueMaxColor} 100%)`;\n\n// Handpicked some vaguely rainbow-ish colors\nexport const byPackageGradient = `linear-gradient(90deg, ${packageColors[0]} 0%, ${packageColors[2]} 30%, ${packageColors[6]} 50%, ${packageColors[7]} 70%, ${packageColors[8]} 100%)`;\n\nexport function getBarColorByValue(value: number, totalTicks: number, rangeMin: number, rangeMax: number) {\n // / (rangeMax - rangeMin) here so when you click a bar it will adjust the top (clicked)bar to the most 'intense' color\n const intensity = Math.min(1, value / totalTicks / (rangeMax - rangeMin));\n const h = 50 - 50 * intensity;\n const l = 65 + 7 * intensity;\n\n return color({ h, s: 100, l });\n}\n\nexport function getBarColorByPackage(label: string, theme: GrafanaTheme2) {\n const packageName = getPackageName(label);\n // TODO: similar thing happens in trace view with selecting colors of the spans, so maybe this could be unified.\n const hash = murmurhash3_32_gc(packageName || '', 0);\n const colorIndex = hash % packageColors.length;\n let packageColor = packageColors[colorIndex].clone();\n if (theme.isLight) {\n packageColor = packageColor.brighten(15);\n }\n return packageColor;\n}\n\n// green to red\nexport const diffDefaultColors = ['rgb(0, 170, 0)', 'rgb(148, 142, 142)', 'rgb(200, 0, 0)'];\nexport const diffDefaultGradient = `linear-gradient(90deg, ${diffDefaultColors[0]} 0%, ${diffDefaultColors[1]} 50%, ${diffDefaultColors[2]} 100%)`;\nexport const diffColorBlindColors = ['rgb(26, 133, 255)', 'rgb(148, 142, 142)', 'rgb(220, 50, 32)'];\nexport const diffColorBlindGradient = `linear-gradient(90deg, ${diffColorBlindColors[0]} 0%, ${diffColorBlindColors[1]} 50%, ${diffColorBlindColors[2]} 100%)`;\n\nexport function getBarColorByDiff(\n ticks: number,\n ticksRight: number,\n totalTicks: number,\n totalTicksRight: number,\n colorScheme: ColorSchemeDiff\n) {\n const range = colorScheme === ColorSchemeDiff.Default ? diffDefaultColors : diffColorBlindColors;\n const colorScale = scaleLinear()\n .domain([-100, 0, 100])\n // TODO types from DefinitelyTyped seem to mismatch\n // @ts-ignore\n .range(range);\n\n const ticksLeft = ticks - ticksRight;\n const totalTicksLeft = totalTicks - totalTicksRight;\n\n if (totalTicksRight === 0 || totalTicksLeft === 0) {\n // TODO types from DefinitelyTyped seem to mismatch\n // @ts-ignore\n const rgbString: string = colorScale(0);\n // Fallback to neutral color as we probably have no data for one of the sides.\n return color(rgbString);\n }\n\n const percentageLeft = Math.round((10000 * ticksLeft) / totalTicksLeft) / 100;\n const percentageRight = Math.round((10000 * ticksRight) / totalTicksRight) / 100;\n\n const diff = ((percentageRight - percentageLeft) / percentageLeft) * 100;\n\n // TODO types from DefinitelyTyped seem to mismatch\n // @ts-ignore\n const rgbString: string = colorScale(diff);\n return color(rgbString);\n}\n\n// const getColors = memoizeOne((theme) => getFilteredColors(colors, theme));\n\n// Different regexes to get the package name and function name from the label. We may at some point get an info about\n// the language from the backend and use the right regex but right now we just try all of them from most to least\n// specific.\nconst matchers = [\n ['phpspy', /^(?<packageName>([^\\/]*\\/)*)(?<filename>.*\\.php+)(?<line_info>.*)$/],\n ['pyspy', /^(?<packageName>([^\\/]*\\/)*)(?<filename>.*\\.py+)(?<line_info>.*)$/],\n ['rbspy', /^(?<packageName>([^\\/]*\\/)*)(?<filename>.*\\.rb+)(?<line_info>.*)$/],\n [\n 'nodespy',\n /^(\\.\\/node_modules\\/)?(?<packageName>[^/]*)(?<filename>.*\\.?(jsx?|tsx?)?):(?<functionName>.*):(?<line_info>.*)$/,\n ],\n ['gospy', /^(?<packageName>.*?\\/.*?\\.|.*?\\.|.+)(?<functionName>.*)$/], // also 'scrape'\n ['javaspy', /^(?<packageName>.+\\/)(?<filename>.+\\.)(?<functionName>.+)$/],\n ['dotnetspy', /^(?<packageName>.+)\\.(.+)\\.(.+)\\(.*\\)$/],\n ['tracing', /^(?<packageName>.+?):.*$/],\n ['pyroscope-rs', /^(?<packageName>[^::]+)/],\n ['ebpfspy', /^(?<packageName>.+)$/],\n ['unknown', /^(?<packageName>.+)$/],\n];\n\n// Get the package name from the symbol. Try matchers from the list and return first one that matches.\nfunction getPackageName(name: string): string | undefined {\n for (const [_, matcher] of matchers) {\n const match = name.match(matcher);\n if (match) {\n return match.groups?.packageName || '';\n }\n }\n return undefined;\n}\n"],"names":["rgbString"],"mappings":"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"}