Merge branch 'master' into master
This commit is contained in:
commit
45c1207d07
|
@ -31,7 +31,7 @@ If installing Lemur on a bare Ubuntu OS you will need to grab the following pack
|
||||||
|
|
||||||
.. note:: PostgreSQL is only required if your database is going to be on the same host as the webserver. npm is needed if you're installing Lemur from the source (e.g., from git).
|
.. note:: PostgreSQL is only required if your database is going to be on the same host as the webserver. npm is needed if you're installing Lemur from the source (e.g., from git).
|
||||||
|
|
||||||
.. note:: Installing node from a package manager may creat the nodejs bin at /usr/bin/nodejs instead of /usr/bin/node If that is the case run the following
|
.. note:: Installing node from a package manager may create the nodejs bin at /usr/bin/nodejs instead of /usr/bin/node If that is the case run the following
|
||||||
sudo ln -s /user/bin/nodejs /usr/bin/node
|
sudo ln -s /user/bin/nodejs /usr/bin/node
|
||||||
|
|
||||||
Now, install Python ``virtualenv`` package:
|
Now, install Python ``virtualenv`` package:
|
||||||
|
|
|
@ -393,6 +393,9 @@ def render(args):
|
||||||
Certificate.cn.ilike(term),
|
Certificate.cn.ilike(term),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
elif "fixedName" in terms:
|
||||||
|
# only what matches the fixed name directly if a fixedname is provided
|
||||||
|
query = query.filter(Certificate.name == terms[1])
|
||||||
else:
|
else:
|
||||||
query = database.filter(query, Certificate, terms)
|
query = database.filter(query, Certificate, terms)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
try:
|
||||||
|
VERSION = __import__("pkg_resources").get_distribution(__name__).version
|
||||||
|
except Exception as e:
|
||||||
|
VERSION = "unknown"
|
|
@ -0,0 +1,97 @@
|
||||||
|
"""
|
||||||
|
.. module: lemur.plugins.lemur_atlas_redis.plugin
|
||||||
|
:platform: Unix
|
||||||
|
:copyright: (c) 2018 by Netflix Inc., see AUTHORS for more
|
||||||
|
:license: Apache, see LICENSE for more details.
|
||||||
|
|
||||||
|
.. moduleauthor:: Jay Zarfoss
|
||||||
|
"""
|
||||||
|
|
||||||
|
from redis import Redis
|
||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from flask import current_app
|
||||||
|
from lemur.plugins import lemur_atlas as atlas
|
||||||
|
from lemur.plugins.bases.metric import MetricPlugin
|
||||||
|
|
||||||
|
|
||||||
|
def millis_since_epoch():
|
||||||
|
"""
|
||||||
|
current time since epoch in milliseconds
|
||||||
|
"""
|
||||||
|
epoch = datetime.utcfromtimestamp(0)
|
||||||
|
delta = datetime.now() - epoch
|
||||||
|
return int(delta.total_seconds() * 1000.0)
|
||||||
|
|
||||||
|
|
||||||
|
class AtlasMetricRedisPlugin(MetricPlugin):
|
||||||
|
title = "AtlasRedis"
|
||||||
|
slug = "atlas-metric-redis"
|
||||||
|
description = "Adds support for sending key metrics to Atlas via local Redis"
|
||||||
|
version = atlas.VERSION
|
||||||
|
|
||||||
|
author = "Jay Zarfoss"
|
||||||
|
author_url = "https://github.com/netflix/lemur"
|
||||||
|
|
||||||
|
options = [
|
||||||
|
{
|
||||||
|
"name": "redis_host",
|
||||||
|
"type": "str",
|
||||||
|
"required": False,
|
||||||
|
"help_message": "If no host is provided localhost is assumed",
|
||||||
|
"default": "localhost",
|
||||||
|
},
|
||||||
|
{"name": "redis_port", "type": "int", "required": False, "default": 28527},
|
||||||
|
]
|
||||||
|
|
||||||
|
metric_data = {}
|
||||||
|
redis_host = None
|
||||||
|
redis_port = None
|
||||||
|
|
||||||
|
def submit(
|
||||||
|
self, metric_name, metric_type, metric_value, metric_tags=None, options=None
|
||||||
|
):
|
||||||
|
if not options:
|
||||||
|
options = self.options
|
||||||
|
|
||||||
|
valid_types = ["COUNTER", "GAUGE", "TIMER"]
|
||||||
|
if metric_type.upper() not in valid_types:
|
||||||
|
raise Exception(
|
||||||
|
"Invalid Metric Type for Atlas: '{metric}' choose from: {options}".format(
|
||||||
|
metric=metric_type, options=",".join(valid_types)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if metric_tags:
|
||||||
|
if not isinstance(metric_tags, dict):
|
||||||
|
raise Exception(
|
||||||
|
"Invalid Metric Tags for Atlas: Tags must be in dict format"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.metric_data["timestamp"] = millis_since_epoch()
|
||||||
|
self.metric_data["type"] = metric_type.upper()
|
||||||
|
self.metric_data["name"] = str(metric_name)
|
||||||
|
self.metric_data["tags"] = metric_tags
|
||||||
|
|
||||||
|
if (
|
||||||
|
metric_value == "NaN"
|
||||||
|
or isinstance(metric_value, int)
|
||||||
|
or isinstance(metric_value, float)
|
||||||
|
):
|
||||||
|
self.metric_data["value"] = metric_value
|
||||||
|
else:
|
||||||
|
raise Exception("Invalid Metric Value for Atlas: Metric must be a number")
|
||||||
|
|
||||||
|
self.redis_host = self.get_option("redis_host", options)
|
||||||
|
self.redis_port = self.get_option("redis_port", options)
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = Redis(host=self.redis_host, port=self.redis_port, socket_timeout=0.1)
|
||||||
|
r.rpush('atlas-agent', json.dumps(self.metric_data))
|
||||||
|
except Exception as e:
|
||||||
|
current_app.logger.warning(
|
||||||
|
"AtlasMetricsRedis: exception [{exception}] could not post atlas metrics to AtlasRedis [{host}:{port}], metric [{metricdata}]".format(
|
||||||
|
exception=e, host=self.redis_host, port=self.redis_port, metricdata=json.dumps(self.metric_data)
|
||||||
|
)
|
||||||
|
)
|
|
@ -78,7 +78,7 @@ def sync_endpoints(source):
|
||||||
source.label
|
source.label
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return new, updated
|
return new, updated, updated_by_hash
|
||||||
|
|
||||||
for endpoint in endpoints:
|
for endpoint in endpoints:
|
||||||
exists = endpoint_service.get_by_dnsname_and_port(
|
exists = endpoint_service.get_by_dnsname_and_port(
|
||||||
|
|
|
@ -11,7 +11,7 @@ angular.module('lemur')
|
||||||
controller: 'CertificatesViewController'
|
controller: 'CertificatesViewController'
|
||||||
})
|
})
|
||||||
.state('certificate', {
|
.state('certificate', {
|
||||||
url: '/certificates/:name',
|
url: '/certificates/:fixedName', // use "fixedName" if in URL to indicate 'like' query can be avoided
|
||||||
templateUrl: '/angular/certificates/view/view.tpl.html',
|
templateUrl: '/angular/certificates/view/view.tpl.html',
|
||||||
controller: 'CertificatesViewController'
|
controller: 'CertificatesViewController'
|
||||||
});
|
});
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
</td>
|
</td>
|
||||||
<td data-title="''" style="text-align: center; vertical-align: middle;">
|
<td data-title="''" style="text-align: center; vertical-align: middle;">
|
||||||
<div class="btn-group pull-right" role="group" aria-label="...">
|
<div class="btn-group pull-right" role="group" aria-label="...">
|
||||||
<a class="btn btn-sm btn-primary" ui-sref="certificate({name: certificate.name})">Permalink</a>
|
<a class="btn btn-sm btn-primary" ui-sref="certificate({fixedName: certificate.name})">Permalink</a>
|
||||||
<button ng-model="certificate.toggle" class="btn btn-sm btn-info" uib-btn-checkbox btn-checkbox-true="1"
|
<button ng-model="certificate.toggle" class="btn btn-sm btn-info" uib-btn-checkbox btn-checkbox-true="1"
|
||||||
btn-checkbox-false="0">More
|
btn-checkbox-false="0">More
|
||||||
</button>
|
</button>
|
||||||
|
|
1
setup.py
1
setup.py
|
@ -147,6 +147,7 @@ setup(
|
||||||
'java_keystore_export = lemur.plugins.lemur_jks.plugin:JavaKeystoreExportPlugin',
|
'java_keystore_export = lemur.plugins.lemur_jks.plugin:JavaKeystoreExportPlugin',
|
||||||
'openssl_export = lemur.plugins.lemur_openssl.plugin:OpenSSLExportPlugin',
|
'openssl_export = lemur.plugins.lemur_openssl.plugin:OpenSSLExportPlugin',
|
||||||
'atlas_metric = lemur.plugins.lemur_atlas.plugin:AtlasMetricPlugin',
|
'atlas_metric = lemur.plugins.lemur_atlas.plugin:AtlasMetricPlugin',
|
||||||
|
'atlas_metric_redis = lemur.plugins.lemur_atlas_redis.plugin:AtlasMetricRedisPlugin',
|
||||||
'kubernetes_destination = lemur.plugins.lemur_kubernetes.plugin:KubernetesDestinationPlugin',
|
'kubernetes_destination = lemur.plugins.lemur_kubernetes.plugin:KubernetesDestinationPlugin',
|
||||||
'cryptography_issuer = lemur.plugins.lemur_cryptography.plugin:CryptographyIssuerPlugin',
|
'cryptography_issuer = lemur.plugins.lemur_cryptography.plugin:CryptographyIssuerPlugin',
|
||||||
'cfssl_issuer = lemur.plugins.lemur_cfssl.plugin:CfsslIssuerPlugin',
|
'cfssl_issuer = lemur.plugins.lemur_cfssl.plugin:CfsslIssuerPlugin',
|
||||||
|
|
Loading…
Reference in New Issue