mirror of https://github.com/D4-project/d4-core
chg: [UI sensor_status] refractor: use datatable + display sensor types + description
TODO: edit desriptionpull/23/head
parent
3a22c250ee
commit
1dd57366c2
|
@ -0,0 +1,82 @@
|
|||
# D4 core
|
||||
|
||||
![](https://www.d4-project.org/assets/images/logo.png)
|
||||
|
||||
## D4 core server
|
||||
|
||||
D4 core server is a complete server to handle clients (sensors) including the decapsulation of the [D4 protocol](https://github.com/D4-project/architecture/tree/master/format), control of
|
||||
sensor registrations, management of decoding protocols and dispatching to adequate decoders/analysers.
|
||||
|
||||
## Database map
|
||||
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| | |
|
||||
| | | |
|
||||
|
||||
### Server
|
||||
| Key | Value |
|
||||
| --- | --- |
|
||||
| server:hmac_default_key | **hmac_default_key** |
|
||||
|
||||
| Set Key | Value |
|
||||
| --- | --- |
|
||||
| server:accepted_type | **accepted type** |
|
||||
| server:accepted_extended_type | **accepted extended type** |
|
||||
|
||||
|
||||
|
||||
### Stats
|
||||
| Zset Key | Field | Value |
|
||||
| --- | --- | --- |
|
||||
| stat_uuid_ip:**date**:**uuid** | **IP** | **number D4 Packets** |
|
||||
| | | |
|
||||
| stat_uuid_type:**date**:**uuid** | **type** | **number D4 Packets** |
|
||||
| | | |
|
||||
| stat_type_uuid:**date**:**type** | **uuid** | **number D4 Packets** |
|
||||
| | | |
|
||||
| stat_ip_uuid:20190519:158.64.14.86 | **uuid** | **number D4 Packets** |
|
||||
| | | |
|
||||
| | | |
|
||||
| daily_uuid:**date** | **uuid** | **number D4 Packets** |
|
||||
| | | |
|
||||
| daily_type:**date** | **type** | **number D4 Packets** |
|
||||
| | | |
|
||||
| daily_ip:**date** | **IP** | **number D4 Packets** |
|
||||
|
||||
### metadata sensors
|
||||
| Hset Key | Field | Value |
|
||||
| --- | --- | --- |
|
||||
| metadata_uuid:**uuid** | first_seen | **epoch** |
|
||||
| | last_seen | **epoch** |
|
||||
| | description | **description** |
|
||||
| | Error | **error message** |
|
||||
|
||||
###### Last IP
|
||||
| List Key | Value |
|
||||
| --- | --- |
|
||||
| list_uuid_ip:**uuid** | **IP** |
|
||||
|
||||
### metadata types by sensors
|
||||
| Hset Key | Field | Value |
|
||||
| --- | --- | --- |
|
||||
| metadata_uuid:**uuid** | first_seen | **epoch** |
|
||||
| | last_seen | **epoch** |
|
||||
|
||||
| Set Key | Value |
|
||||
| --- | --- |
|
||||
| all_types_by_uuid:**uuid** | **type** |
|
||||
|
||||
### analyzers
|
||||
###### metadata
|
||||
| Hset Key | Field | Value |
|
||||
| --- | --- | --- |
|
||||
| analyzer:**uuid** | last_updated | **epoch** |
|
||||
| | description | **description** |
|
||||
| | max_size | **queue max size** |
|
||||
|
||||
###### all analyzers by type
|
||||
| Set Key | Value |
|
||||
| --- | --- |
|
||||
| analyzer:**type** | **uuid** |
|
||||
| analyzer:254:**extended type** | **uuid** |
|
|
@ -200,7 +200,6 @@ def page_not_found(e):
|
|||
# ========== ROUTES ============
|
||||
@app.route('/test')
|
||||
def test():
|
||||
print(get_uuid_disk_statistics('fae58cdc30024239874f4c7ce53fbf4d', date_day='20190527'))
|
||||
return 'test'
|
||||
|
||||
@app.route('/')
|
||||
|
@ -259,6 +258,9 @@ def sensors_status():
|
|||
first_seen_gmt = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(first_seen)))
|
||||
last_seen = redis_server_metadata.hget('metadata_uuid:{}'.format(result), 'last_seen')
|
||||
last_seen_gmt = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(last_seen)))
|
||||
description = redis_server_metadata.hget('metadata_uuid:{}'.format(result), 'description')
|
||||
l_uuid_types = list(redis_server_metadata.smembers('all_types_by_uuid:{}'.format(result)))
|
||||
l_uuid_types.sort()
|
||||
if redis_server_metadata.sismember('blacklist_ip_by_uuid', result):
|
||||
Error = "All IP using this UUID are Blacklisted"
|
||||
elif redis_server_metadata.sismember('blacklist_uuid', result):
|
||||
|
@ -272,8 +274,9 @@ def sensors_status():
|
|||
|
||||
if first_seen is not None and last_seen is not None:
|
||||
status_daily_uuid.append({"uuid": result,"first_seen": first_seen, "last_seen": last_seen,
|
||||
"active_connection": active_connection,
|
||||
"first_seen_gmt": first_seen_gmt, "last_seen_gmt": last_seen_gmt, "Error": Error})
|
||||
"active_connection": active_connection, "description": description,
|
||||
"first_seen_gmt": first_seen_gmt, "last_seen_gmt": last_seen_gmt,
|
||||
"l_uuid_types": l_uuid_types, "Error": Error})
|
||||
|
||||
return render_template("sensors_status.html", status_daily_uuid=status_daily_uuid,
|
||||
active_connection_filter=active_connection_filter)
|
||||
|
|
|
@ -7,10 +7,13 @@
|
|||
<!-- Core CSS -->
|
||||
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='font-awesome/css/font-awesome.css') }}" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/dataTables.bootstrap.min.css') }}" rel="stylesheet">
|
||||
|
||||
<!-- JS -->
|
||||
<script src="{{ url_for('static', filename='js/jquery.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/bootstrap.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/jquery.dataTables.min.js')}}"></script>
|
||||
<script src="{{ url_for('static', filename='js/dataTables.bootstrap.min.js')}}"></script>
|
||||
|
||||
<style>
|
||||
|
||||
|
@ -63,56 +66,64 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mx-2">
|
||||
<table class="table table-striped table-bordered table-hover text-center" id="myTable_1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="bg-info text-white">UUID</th>
|
||||
<th class="bg-info text-white">first seen</th>
|
||||
<th class="bg-info text-white">last seen</th>
|
||||
<th class="bg-info text-white">types</th>
|
||||
<th class="bg-secondary text-white">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row_uuid in status_daily_uuid %}
|
||||
<div class="card text-center mt-3 ml-2 mr-2">
|
||||
<a class="btn btn-outline-dark px-1 py-1" href="{{ url_for('uuid_management') }}?uuid={{row_uuid['uuid']}}">
|
||||
<div class="card-header bg-dark text-white">
|
||||
UUID: {{row_uuid['uuid']}}
|
||||
</div>
|
||||
<tr>
|
||||
<td>
|
||||
<a class="" href="{{ url_for('uuid_management') }}?uuid={{row_uuid['uuid']}}">
|
||||
{{row_uuid['uuid']}}
|
||||
</a>
|
||||
<div class="card-body">
|
||||
<div class="card-group">
|
||||
<div class="card">
|
||||
<div class="card-header bg-info text-white">
|
||||
First Seen
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text">{{row_uuid['first_seen_gmt']}} - ({{row_uuid['first_seen']}})</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header bg-info text-white">
|
||||
Last Seen
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="card-text">{{row_uuid['last_seen_gmt']}} - ({{row_uuid['last_seen']}})</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="text-info"><small>{{row_uuid['description']}}</small></div>
|
||||
</td>
|
||||
<td>{{row_uuid['first_seen_gmt']}} - ({{row_uuid['first_seen']}})</td>
|
||||
<td>{{row_uuid['last_seen_gmt']}} - ({{row_uuid['last_seen']}})</td>
|
||||
<td>
|
||||
{% for uuid_type in row_uuid['l_uuid_types'] %}
|
||||
<span class="badge badge-dark">{{uuid_type}}</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td
|
||||
{% if not row_uuid['Error'] %}
|
||||
<div class="card-header bg-success text-white">
|
||||
Status
|
||||
</div>
|
||||
<div class="card-body text-success">
|
||||
<p class="card-text">OK</p>
|
||||
div class="text-success">
|
||||
OK -
|
||||
{% else %}
|
||||
<div class="card-header bg-danger text-white">
|
||||
Status
|
||||
</div>
|
||||
<div class="card-body text-danger">
|
||||
<p class="card-text">{{row_uuid['Error']}}</p>
|
||||
div class="text-danger">
|
||||
<i class="fa fa-times-circle"></i> {{row_uuid['Error']}}
|
||||
{% endif %}
|
||||
{% if row_uuid['active_connection'] %}
|
||||
<div style="color:Green; display:inline-block">
|
||||
<i class="fa fa-check-circle"></i> Connected
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
{% include 'navfooter.html' %}
|
||||
</body>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
table = $('#myTable_1').DataTable(
|
||||
{
|
||||
"aLengthMenu": [[5, 10, 15, 20, -1], [5, 10, 15, 20, "All"]],
|
||||
"iDisplayLength": 10,
|
||||
"order": [[ 0, "asc" ]]
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
Loading…
Reference in New Issue