Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
import attr
from grafanalib import core as g
DECREASING_ORDER_TOOLTIP = g.Tooltip(sort=g.SORT_DESC)
PANEL_HEIGHT = g.Pixels(300)
QUANTILES = [0.99, 0.9, 0.5]
SOURCE_TEMPLATE = g.Template(name="source", type="datasource", query="prometheus")
@attr.s
class Dashboard(g.Dashboard):
time = attr.ib(default=g.Time("now-30d", "now"))
# Make it possible to use $source as a source.
templating = attr.ib(default=g.Templating(list=[SOURCE_TEMPLATE]))
# Graph is a g.Graph with reasonable defaults applied.
@attr.s
class Graph(g.Graph):
dataSource = attr.ib(default="$source")
:param triggerSeverity: defines colors for trigger severity,
:param triggers: trigger query
"""
dataSource = attr.ib()
title = attr.ib()
ackEventColor = attr.ib(default=attr.Factory(lambda: BLANK),
validator=instance_of(RGBA))
ageField = attr.ib(default=True, validator=instance_of(bool))
customLastChangeFormat = attr.ib(default=False,
validator=instance_of(bool))
description = attr.ib(default="", validator=instance_of(str))
fontSize = attr.ib(default=attr.Factory(Percent),
validator=instance_of(Percent))
height = attr.ib(default=DEFAULT_ROW_HEIGHT, validator=instance_of(Pixels))
hideHostsInMaintenance = attr.ib(default=False,
validator=instance_of(bool))
hostField = attr.ib(default=True, validator=instance_of(bool))
hostTechNameField = attr.ib(default=False, validator=instance_of(bool))
id = attr.ib(default=None)
infoField = attr.ib(default=True, validator=instance_of(bool))
lastChangeField = attr.ib(default=True, validator=instance_of(bool))
lastChangeFormat = attr.ib(default="")
limit = attr.ib(default=10, validator=instance_of(int))
links = attr.ib(default=attr.Factory(list),
validator=is_list_of(DashboardLink))
markAckEvents = attr.ib(default=False, validator=instance_of(bool))
minSpan = attr.ib(default=None)
okEventColor = attr.ib(default=attr.Factory(lambda: GREEN),
validator=instance_of(RGBA))
NULL_AS_ZERO = 'null as zero'
NULL_AS_NULL = 'null'
FLOT = 'flot'
ABSOLUTE_TYPE = 'absolute'
DASHBOARD_TYPE = 'dashboard'
GRAPH_TYPE = 'graph'
SINGLESTAT_TYPE = 'singlestat'
TABLE_TYPE = 'table'
TEXT_TYPE = 'text'
ALERTLIST_TYPE = "alertlist"
DEFAULT_FILL = 1
DEFAULT_REFRESH = '10s'
DEFAULT_ROW_HEIGHT = Pixels(250)
DEFAULT_LINE_WIDTH = 2
DEFAULT_POINT_RADIUS = 5
DEFAULT_RENDERER = FLOT
DEFAULT_STEP = 10
DEFAULT_LIMIT = 10
TOTAL_SPAN = 12
DARK_STYLE = 'dark'
LIGHT_STYLE = 'light'
UTC = 'utc'
SCHEMA_VERSION = 12
# Y Axis formats
DURATION_FORMAT = "dtdurations"
@attr.s
class Row(object):
# TODO: jml would like to separate the balancing behaviour from this
# layer.
panels = attr.ib(default=attr.Factory(list), converter=_balance_panels)
collapse = attr.ib(
default=False, validator=instance_of(bool),
)
editable = attr.ib(
default=True, validator=instance_of(bool),
)
height = attr.ib(
default=attr.Factory(lambda: DEFAULT_ROW_HEIGHT),
validator=instance_of(Pixels),
)
showTitle = attr.ib(default=None)
title = attr.ib(default=None)
repeat = attr.ib(default=None)
def _iter_panels(self):
return iter(self.panels)
def _map_panels(self, f):
return attr.evolve(self, panels=list(map(f, self.panels)))
def to_json_data(self):
showTitle = False
title = "New row"
if self.title is not None:
showTitle = True