Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiloggers for osctrl-tls #66

Merged
merged 3 commits into from
Apr 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,3 @@ script:
- go build -o bin/osctrl-tls tls/*.go
- go build -o bin/osctrl-admin admin/*.go
- go build -o bin/osctrl-cli cli/*.go
- go test ./utils -v
- go test ./tls/handlers -v
17 changes: 17 additions & 0 deletions admin/handlers/go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
module github.com/javuto/osctrl/admin/handlers

go 1.14

require (
github.com/gorilla/mux v1.7.4
github.com/gorilla/sessions v1.2.0 // indirect
github.com/jinzhu/gorm v1.9.12
github.com/jmpsec/osctrl/admin/sessions v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/carves v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/environments v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/logging v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/metrics v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/nodes v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/queries v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/settings v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/types v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/users v0.0.0-20200414054912-1250e8656474
github.com/jmpsec/osctrl/utils v0.0.0-20200414054912-1250e8656474
)
267 changes: 267 additions & 0 deletions admin/handlers/go.sum

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion admin/handlers/json-queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func (h *HandlersAdmin) JSONQueryHandler(w http.ResponseWriter, r *http.Request)
data := make(QueryData)
data["query"] = q.Query
data["name"] = q.Name
data["deflink"], data["dblink"] = h.queryResultLink(q.Name)
data["link"] = h.queryResultLink(q.Name)
// Preparing query targets
ts, _ := h.Queries.GetTargets(q.Name)
_ts := []QueryTarget{}
Expand Down
13 changes: 5 additions & 8 deletions admin/handlers/templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -513,9 +513,13 @@ func (h *HandlersAdmin) QueryLogsHandler(w http.ResponseWriter, r *http.Request)
log.Println("error getting name")
return
}
// Custom functions to handle formatting
funcMap := template.FuncMap{
"queryResultLink": h.queryResultLink,
}
// Prepare template
tempateFiles := NewTemplateFiles(templatesFilesFolder, "queries-logs.html").filepaths
t, err := template.ParseFiles(tempateFiles...)
t, err := template.New("queries-logs.html").Funcs(funcMap).ParseFiles(tempateFiles...)
if err != nil {
h.Inc(metricAdminErr)
log.Printf("error getting table template: %v", err)
Expand Down Expand Up @@ -549,19 +553,13 @@ func (h *HandlersAdmin) QueryLogsHandler(w http.ResponseWriter, r *http.Request)
log.Printf("error getting targets %v", err)
return
}
defLink, dbLink := h.queryResultLink(query.Name)
resLink := ""
if defLink != dbLink {
resLink = dbLink
}
// Prepare template data
templateData := QueryLogsTemplateData{
Title: "Query logs " + query.Name,
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
Environments: envAll,
Platforms: platforms,
Query: query,
ResultsLink: resLink,
QueryTargets: targets,
}
if err := t.Execute(w, templateData); err != nil {
Expand Down Expand Up @@ -895,7 +893,6 @@ func (h *HandlersAdmin) NodeHandler(w http.ResponseWriter, r *http.Request) {
templateData := NodeTemplateData{
Title: "Node View " + node.Hostname,
Metadata: h.TemplateMetadata(ctx, h.ServiceVersion),
Logs: h.AdminConfig.Logging,
Node: node,
Environments: envAll,
Platforms: platforms,
Expand Down
2 changes: 0 additions & 2 deletions admin/handlers/types-templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ type QueryLogsTemplateData struct {
Environments []environments.TLSEnvironment
Platforms []string
Query queries.DistributedQuery
ResultsLink string
QueryTargets []queries.DistributedQueryTarget
Metadata TemplateMetadata
}
Expand Down Expand Up @@ -154,7 +153,6 @@ type UsersTemplateData struct {
// NodeTemplateData for passing data to the query template
type NodeTemplateData struct {
Title string
Logs string
Node nodes.OsqueryNode
Environments []environments.TLSEnvironment
Platforms []string
Expand Down
8 changes: 3 additions & 5 deletions admin/handlers/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,15 @@ func toJSONConfigurationService(values []settings.SettingValue) types.JSONConfig
cfg.Auth = v.String
}
if v.Name == settings.JSONLogging {
cfg.Logging = v.String
cfg.Logging = strings.Split(v.String, ",")
}
}
return cfg
}

// Helper to generate a link to results for on-demand queries
func (h *HandlersAdmin) queryResultLink(name string) (string, string) {
defaultLink := strings.Replace(settings.QueryLink, "{{NAME}}", removeBackslash(name), 1)
dbLink := strings.Replace(h.Settings.QueryResultLink(), "{{NAME}}", removeBackslash(name), 1)
return defaultLink, dbLink
func (h *HandlersAdmin) queryResultLink(name string) string {
return strings.Replace(h.Settings.QueryResultLink(), "{{NAME}}", removeBackslash(name), 1)
}

// Helper to generate a link to results for status logs
Expand Down
6 changes: 4 additions & 2 deletions admin/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,10 @@ func loadConfiguration(file, service string) (types.JSONConfigurationService, er
if !validAuth[cfg.Auth] {
return cfg, fmt.Errorf("Invalid auth method")
}
if !validLogging[cfg.Logging] {
return cfg, fmt.Errorf("Invalid logging method")
for _, _l := range cfg.Logging {
if !validLogging[_l] {
return cfg, fmt.Errorf("Invalid logging method")
}
}
// No errors!
return cfg, nil
Expand Down
4 changes: 3 additions & 1 deletion admin/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"fmt"
"log"
"strings"

"github.com/jmpsec/osctrl/metrics"
"github.com/jmpsec/osctrl/settings"
Expand Down Expand Up @@ -99,7 +100,8 @@ func loadingSettings(mgr *settings.Settings) error {
return fmt.Errorf("Failed to load logging settings: %v", err)
}
// Write JSON config to settings
if err := mgr.SetAllJSON(settings.ServiceAdmin, adminConfig.Listener, adminConfig.Port, adminConfig.Host, adminConfig.Auth, adminConfig.Logging); err != nil {
logging := strings.Join(adminConfig.Logging, ",")
if err := mgr.SetAllJSON(settings.ServiceAdmin, adminConfig.Listener, adminConfig.Port, adminConfig.Host, adminConfig.Auth, logging); err != nil {
return fmt.Errorf("Failed to add JSON values to configuration: %v", err)
}
return nil
Expand Down
9 changes: 3 additions & 6 deletions admin/static/js/query.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,7 @@ function confirmDeleteQueries(_names) {
$("#confirmModal").modal();
}

function queryResultLink(defLink, dbLink, query) {
var query_link = '<span class="query-link"><a href="' + defLink + '">' + query + '</a></span>';
if (defLink !== dbLink) {
query_link = '<span class="query-link"><a href="' + defLink + '">' + query + '</a></span> <a href="' + dbLink + '" _target="_blank"><i class="fas fa-external-link-alt"></i></a>';
}
return query_link
function queryResultLink(link, query) {
var external_link = '<a href="' + link + '" _target="_blank"><i class="fas fa-external-link-alt"></i></a>';
return '<span class="query-link"><a href="/query/logs/' + query + '">' + query + '</a> - ' + external_link + '</span> ';
}
68 changes: 34 additions & 34 deletions admin/templates/node.html
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,14 @@

</div>

{{ if eq $template.Logs "db" }}
<div class="tab-pane fade" id="status-logs" role="tabpanel">
<div class="card mt-2">
<div id="status-card-header" class="card-header">
<i class="fas fa-stream"></i>
<label for="back_hours_status">Last <b><output id="back_output_status">6</output></b> hours of status logs for node {{ .UUID }}</label>
<a href="{{ statusLogsLink .UUID }}" target="_blank">
<i class="fas fa-external-link-alt"></i>
</a>
<input type="range" class="form-control-range" id="back_hours_status"
value="6" min="1" max="24" step="1" oninput="changeBackValue('tableStatusLogs', back_hours_status, back_output_status);">
<div class="card-header-actions">
Expand Down Expand Up @@ -321,27 +323,15 @@
</div>
</div>
</div>
{{ else }}
<div class="tab-pane fade" id="status-logs" role="tabpanel">
<div class="card mt-2">
<div id="result-card-header" class="card-header">
<i class="fas fa-stream"></i> See status logs for node {{ .UUID }}
</div>
<div id="status-table" class="card-body">
<a href="{{ statusLogsLink .UUID }}" target="_blank">
See status logs in {{ $template.Logs }}
</a>
</div>
</div>
</div>
{{ end }}

{{ if eq $template.Logs "db" }}
<div class="tab-pane fade" id="result-logs" role="tabpanel">
<div class="card mt-2">
<div id="result-card-header" class="card-header">
<i class="fas fa-stream"></i>
<label for="back_hours_result">Last <b><output id="back_output_result">6</output></b> hours of status logs for node {{ .UUID }}</label>
<a href="{{ resultLogsLink .UUID }}" target="_blank">
<i class="fas fa-external-link-alt"></i>
</a>
<input type="range" class="form-control-range" id="back_hours_result"
value="6" min="1" max="24" step="1" oninput="changeBackValue('tableResultLogs', back_hours_result, back_output_result);">
<div class="card-header-actions">
Expand Down Expand Up @@ -370,20 +360,6 @@
</div>
</div>
</div>
{{ else }}
<div class="tab-pane fade" id="result-logs" role="tabpanel">
<div class="card mt-2">
<div id="result-card-header" class="card-header">
<i class="fas fa-stream"></i> See result logs for node {{ .UUID }}
</div>
<div id="results-table" class="card-body">
<a href="{{ resultLogsLink .UUID }}" target="_blank">
See result logs in {{ $template.Logs }}
</a>
</div>
</div>
</div>
{{ end }}

</div>

Expand Down Expand Up @@ -428,7 +404,6 @@
hljs.highlightBlock(block);
});

{{ if eq $template.Logs "db" }}
// Handle datatable ajax error
$.fn.dataTable.ext.errMode = function(settings, helpPage, message) {
console.log(message);
Expand Down Expand Up @@ -466,7 +441,17 @@
order: [[ 0, "desc" ]],
columnDefs: [
{ width: '10%', targets: 0 },
{ width: '88%', targets: 1 },
{
width: '88%',
targets: 1,
render: function (data, type, row, meta) {
if (type === 'display') {
return '<pre>' + data + '</pre>';
} else {
return data;
}
}
},
{ width: '2%', targets: 2 }
]
});
Expand Down Expand Up @@ -511,7 +496,17 @@
columnDefs: [
{ width: '10%', targets: 0 },
{ width: '10%', targets: 1 },
{ width: '80%', targets: 2 }
{
width: '80%',
targets: 2,
render: function (data, type, row, meta) {
if (type === 'display') {
return '<pre>' + JSON.stringify(JSON.parse(data),null,2); + '</pre>';
} else {
return data;
}
}
}
]
});

Expand All @@ -528,7 +523,6 @@
tableResultLogs.ajax.reload();
}
},1000);
{{ end }}

// Refresh sidebar stats
beginStats();
Expand All @@ -548,6 +542,12 @@
// Maintain open the node's environment toggle
$("input[value='{{ .Environment }}']").parent().parent().addClass("open");

// Display log tab if passed in the URL
$(function(){
var hash = window.location.hash;
hash && $('ul.nav a[href="' + hash + '"]').tab('show');
});

// Enable all tooltips
$('[data-tooltip="true"]').tooltip({trigger : 'hover'});
});
Expand Down
16 changes: 12 additions & 4 deletions admin/templates/queries-logs.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,7 @@
{{ else }}
<i class="fas fa-hourglass-half"></i> [ <b>ACTIVE</b> ] - Results for {{ .Name }}
{{ end }}
{{ if $template.ResultsLink }}
- <a href="{{ $template.ResultsLink }}" target="_blank"><i class="fas fa-external-link-alt"></i></a>
{{ end }}
- <a href="{{ queryResultLink .Name }}" target="_blank"><i class="fas fa-external-link-alt"></i></a>
<div class="card-header-actions">
<button class="btn btn-sm btn-outline-primary" data-tooltip="true"
data-placement="bottom" title="Refresh table" onclick="refreshTableNow('tableQueryLogs');">
Expand Down Expand Up @@ -136,7 +134,17 @@
order: [[ 0, "desc" ]],
columnDefs: [
{ width: '10%', targets: 0 },
{ width: '90%', targets: 1 }
{
width: '90%',
targets: 1,
render: function (data, type, row, meta) {
if (type === 'display') {
return '<pre>' + JSON.stringify(JSON.parse(data),null,2) + '</pre>';
} else {
return data;
}
}
}
]
});

Expand Down
2 changes: 1 addition & 1 deletion admin/templates/queries.html
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
data: 'query',
render: function (data, type, row, meta) {
if (type === 'display') {
return queryResultLink(data.deflink, data.dblink, data.query);
return queryResultLink(data.link, data.name);
} else {
return data;
}
Expand Down
2 changes: 1 addition & 1 deletion admin/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func toJSONConfigurationService(values []settings.SettingValue) types.JSONConfig
cfg.Auth = v.String
}
if v.Name == settings.JSONLogging {
cfg.Logging = v.String
cfg.Logging = strings.Split(v.String, ",")
}
}
return cfg
Expand Down
6 changes: 4 additions & 2 deletions api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,10 @@ func loadConfiguration(file string) (types.JSONConfigurationService, error) {
if !validAuth[cfg.Auth] {
return cfg, fmt.Errorf("Invalid auth method: '%s'", cfg.Auth)
}
if !validLogging[cfg.Logging] {
return cfg, fmt.Errorf("Invalid logging method: '%s'", cfg.Logging)
for _, _l := range cfg.Logging {
if !validLogging[_l] {
return cfg, fmt.Errorf("Invalid logging method")
}
}
// No errors!
return cfg, nil
Expand Down
4 changes: 3 additions & 1 deletion api/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"log"
"strings"

"github.com/jmpsec/osctrl/metrics"
"github.com/jmpsec/osctrl/settings"
Expand Down Expand Up @@ -84,7 +85,8 @@ func loadingSettings() {
// Metrics
loadingMetrics()
// Write JSON config to settings
if err := settingsmgr.SetAllJSON(settings.ServiceAPI, apiConfig.Listener, apiConfig.Port, apiConfig.Host, apiConfig.Auth, apiConfig.Logging); err != nil {
logging := strings.Join(apiConfig.Logging, ",")
if err := settingsmgr.SetAllJSON(settings.ServiceAPI, apiConfig.Listener, apiConfig.Port, apiConfig.Host, apiConfig.Auth, logging); err != nil {
log.Fatalf("Failed to add JSON values to configuration: %v", err)
}
}
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ require (
github.com/beevik/etree v1.1.0 // indirect
github.com/crewjam/saml v0.0.0-20190508002657-ca21de9dd5b9
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/gorilla/mux v1.7.2
github.com/gorilla/sessions v1.1.3 // indirect
github.com/gorilla/mux v1.7.4
github.com/jinzhu/gorm v1.9.12
github.com/jmpsec/osctrl/admin/handlers v0.2.1
github.com/jmpsec/osctrl/admin/sessions v0.2.1
Expand Down
Loading