From e897e6cf92198456cdb3f2f14d7438631a0b7d0b Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Wed, 11 Jul 2018 17:04:18 -0700 Subject: [PATCH 1/8] Move LogViewer from Config to OrganizationConfig links response --- integrations/server_test.go | 74 +------------------------------------ server/links.go | 10 +++-- server/routes.go | 38 ++++++++++--------- server/routes_test.go | 6 +-- 4 files changed, 33 insertions(+), 95 deletions(-) diff --git a/integrations/server_test.go b/integrations/server_test.go index 60305d4aae..b634e6882f 100644 --- a/integrations/server_test.go +++ b/integrations/server_test.go @@ -3403,42 +3403,7 @@ func TestServer(t *testing.T) { }, wants: wants{ statusCode: 200, - body: ` - { - "layouts": "/chronograf/v1/layouts", - "users": "/chronograf/v1/organizations/default/users", - "allUsers": "/chronograf/v1/users", - "organizations": "/chronograf/v1/organizations", - "mappings": "/chronograf/v1/mappings", - "sources": "/chronograf/v1/sources", - "me": "/chronograf/v1/me", - "environment": "/chronograf/v1/env", - "dashboards": "/chronograf/v1/dashboards", - "config": { - "self": "/chronograf/v1/config", - "auth": "/chronograf/v1/config/auth", - "logViewer": "/chronograf/v1/config/logviewer" - }, - "auth": [ - { - "name": "github", - "label": "Github", - "login": "/oauth/github/login", - "logout": "/oauth/github/logout", - "callback": "/oauth/github/callback" - } - ], - "logout": "/oauth/logout", - "external": { - "statusFeed": "" - }, - "flux": { - "ast": "/chronograf/v1/flux/ast", - "self": "/chronograf/v1/flux", - "suggestions": "/chronograf/v1/flux/suggestions" - } - } - `, + body: `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth"},"orgConfig":{"self":"/chronograf/v1/org_config","logViewer":"/chronograf/v1/org_config/logviewer"},"auth":[{"name":"github","label":"Github","login":"/oauth/github/login","logout":"/oauth/github/logout","callback":"/oauth/github/callback"}],"logout":"/oauth/logout","external":{"statusFeed":""},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}}`, }, }, { @@ -3492,42 +3457,7 @@ func TestServer(t *testing.T) { }, wants: wants{ statusCode: 200, - body: ` - { - "layouts": "/chronograf/v1/layouts", - "users": "/chronograf/v1/organizations/1/users", - "allUsers": "/chronograf/v1/users", - "organizations": "/chronograf/v1/organizations", - "mappings": "/chronograf/v1/mappings", - "sources": "/chronograf/v1/sources", - "me": "/chronograf/v1/me", - "environment": "/chronograf/v1/env", - "dashboards": "/chronograf/v1/dashboards", - "config": { - "self": "/chronograf/v1/config", - "auth": "/chronograf/v1/config/auth", - "logViewer": "/chronograf/v1/config/logviewer" - }, - "auth": [ - { - "name": "github", - "label": "Github", - "login": "/oauth/github/login", - "logout": "/oauth/github/logout", - "callback": "/oauth/github/callback" - } - ], - "logout": "/oauth/logout", - "external": { - "statusFeed": "" - }, - "flux": { - "ast": "/chronograf/v1/flux/ast", - "self": "/chronograf/v1/flux", - "suggestions": "/chronograf/v1/flux/suggestions" - } - } - `, + body: `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/1/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth"},"orgConfig":{"self":"/chronograf/v1/org_config","logViewer":"/chronograf/v1/org_config/logviewer"},"auth":[{"name":"github","label":"Github","login":"/oauth/github/login","logout":"/oauth/github/logout","callback":"/oauth/github/callback"}],"logout":"/oauth/logout","external":{"statusFeed":""},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}}`, }, }, } diff --git a/server/links.go b/server/links.go index 7dc3f037ea..ae5555dfac 100644 --- a/server/links.go +++ b/server/links.go @@ -12,9 +12,13 @@ type getFluxLinksResponse struct { } type getConfigLinksResponse struct { - Self string `json:"self"` // Location of the whole global application configuration - Auth string `json:"auth"` // Location of the auth section of the global application configuration - LogViewer string `json:"logViewer"` // Location of the log viewer section of the global application configuration + Self string `json:"self"` // Location of the whole global application configuration + Auth string `json:"auth"` // Location of the auth section of the global application configuration +} + +type getOrganizationConfigLinksResponse struct { + Self string `json:"self"` // Location of the organization configuration + LogViewer string `json:"logViewer"` // Location of the organization-specific log viewer configuration } type getExternalLinksResponse struct { diff --git a/server/routes.go b/server/routes.go index 9d62115f45..511ce39d71 100644 --- a/server/routes.go +++ b/server/routes.go @@ -31,20 +31,21 @@ func (r *AuthRoutes) Lookup(provider string) (AuthRoute, bool) { } type getRoutesResponse struct { - Layouts string `json:"layouts"` // Location of the layouts endpoint - Users string `json:"users"` // Location of the users endpoint - AllUsers string `json:"allUsers"` // Location of the raw users endpoint - Organizations string `json:"organizations"` // Location of the organizations endpoint - Mappings string `json:"mappings"` // Location of the application mappings endpoint - Sources string `json:"sources"` // Location of the sources endpoint - Me string `json:"me"` // Location of the me endpoint - Environment string `json:"environment"` // Location of the environement endpoint - Dashboards string `json:"dashboards"` // Location of the dashboards endpoint - Config getConfigLinksResponse `json:"config"` // Location of the config endpoint and its various sections - Auth []AuthRoute `json:"auth"` // Location of all auth routes. - Logout *string `json:"logout,omitempty"` // Location of the logout route for all auth routes - ExternalLinks getExternalLinksResponse `json:"external"` // All external links for the client to use - Flux getFluxLinksResponse `json:"flux"` + Layouts string `json:"layouts"` // Location of the layouts endpoint + Users string `json:"users"` // Location of the users endpoint + AllUsers string `json:"allUsers"` // Location of the raw users endpoint + Organizations string `json:"organizations"` // Location of the organizations endpoint + Mappings string `json:"mappings"` // Location of the application mappings endpoint + Sources string `json:"sources"` // Location of the sources endpoint + Me string `json:"me"` // Location of the me endpoint + Environment string `json:"environment"` // Location of the environement endpoint + Dashboards string `json:"dashboards"` // Location of the dashboards endpoint + Config getConfigLinksResponse `json:"config"` // Location of the config endpoint and its various sections + OrganizationConfig getOrganizationConfigLinksResponse `json:"orgConfig"` // Location of the organization config endpoint + Auth []AuthRoute `json:"auth"` // Location of all auth routes. + Logout *string `json:"logout,omitempty"` // Location of the logout route for all auth routes + ExternalLinks getExternalLinksResponse `json:"external"` // All external links for the client to use + Flux getFluxLinksResponse `json:"flux"` } // AllRoutes is a handler that returns all links to resources in Chronograf server, as well as @@ -87,9 +88,12 @@ func (a *AllRoutes) ServeHTTP(w http.ResponseWriter, r *http.Request) { Mappings: "/chronograf/v1/mappings", Dashboards: "/chronograf/v1/dashboards", Config: getConfigLinksResponse{ - Self: "/chronograf/v1/config", - Auth: "/chronograf/v1/config/auth", - LogViewer: "/chronograf/v1/config/logviewer", + Self: "/chronograf/v1/config", + Auth: "/chronograf/v1/config/auth", + }, + OrganizationConfig: getOrganizationConfigLinksResponse{ + Self: "/chronograf/v1/org_config", + LogViewer: "/chronograf/v1/org_config/logviewer", }, Auth: make([]AuthRoute, len(a.AuthRoutes)), // We want to return at least an empty array, rather than null ExternalLinks: getExternalLinksResponse{ diff --git a/server/routes_test.go b/server/routes_test.go index ed2abe0b0e..800d02d68e 100644 --- a/server/routes_test.go +++ b/server/routes_test.go @@ -29,7 +29,7 @@ func TestAllRoutes(t *testing.T) { if err := json.Unmarshal(body, &routes); err != nil { t.Error("TestAllRoutes not able to unmarshal JSON response") } - want := `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth","logViewer":"/chronograf/v1/config/logviewer"},"auth":[],"external":{"statusFeed":""},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}} + want := `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth"},"orgConfig":{"self":"/chronograf/v1/org_config","logViewer":"/chronograf/v1/org_config/logviewer"},"auth":[],"external":{"statusFeed":""},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}} ` if want != string(body) { t.Errorf("TestAllRoutes\nwanted\n*%s*\ngot\n*%s*", want, string(body)) @@ -67,7 +67,7 @@ func TestAllRoutesWithAuth(t *testing.T) { if err := json.Unmarshal(body, &routes); err != nil { t.Error("TestAllRoutesWithAuth not able to unmarshal JSON response") } - want := `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth","logViewer":"/chronograf/v1/config/logviewer"},"auth":[{"name":"github","label":"GitHub","login":"/oauth/github/login","logout":"/oauth/github/logout","callback":"/oauth/github/callback"}],"logout":"/oauth/logout","external":{"statusFeed":""},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}} + want := `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth"},"orgConfig":{"self":"/chronograf/v1/org_config","logViewer":"/chronograf/v1/org_config/logviewer"},"auth":[{"name":"github","label":"GitHub","login":"/oauth/github/login","logout":"/oauth/github/logout","callback":"/oauth/github/callback"}],"logout":"/oauth/logout","external":{"statusFeed":""},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}} ` if want != string(body) { t.Errorf("TestAllRoutesWithAuth\nwanted\n*%s*\ngot\n*%s*", want, string(body)) @@ -100,7 +100,7 @@ func TestAllRoutesWithExternalLinks(t *testing.T) { if err := json.Unmarshal(body, &routes); err != nil { t.Error("TestAllRoutesWithExternalLinks not able to unmarshal JSON response") } - want := `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth","logViewer":"/chronograf/v1/config/logviewer"},"auth":[],"external":{"statusFeed":"http://pineapple.life/feed.json","custom":[{"name":"cubeapple","url":"https://cube.apple"}]},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}} + want := `{"layouts":"/chronograf/v1/layouts","users":"/chronograf/v1/organizations/default/users","allUsers":"/chronograf/v1/users","organizations":"/chronograf/v1/organizations","mappings":"/chronograf/v1/mappings","sources":"/chronograf/v1/sources","me":"/chronograf/v1/me","environment":"/chronograf/v1/env","dashboards":"/chronograf/v1/dashboards","config":{"self":"/chronograf/v1/config","auth":"/chronograf/v1/config/auth"},"orgConfig":{"self":"/chronograf/v1/org_config","logViewer":"/chronograf/v1/org_config/logviewer"},"auth":[],"external":{"statusFeed":"http://pineapple.life/feed.json","custom":[{"name":"cubeapple","url":"https://cube.apple"}]},"flux":{"ast":"/chronograf/v1/flux/ast","self":"/chronograf/v1/flux","suggestions":"/chronograf/v1/flux/suggestions"}} ` if want != string(body) { t.Errorf("TestAllRoutesWithExternalLinks\nwanted\n*%s*\ngot\n*%s*", want, string(body)) From da46ca63dd485cf90b92b1d43d76d9af13fec20f Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Wed, 11 Jul 2018 17:09:12 -0700 Subject: [PATCH 2/8] Replace hard-coded log config data with call to server --- ui/src/logs/actions/index.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/ui/src/logs/actions/index.ts b/ui/src/logs/actions/index.ts index 97cc47ab50..f97d3d0a89 100644 --- a/ui/src/logs/actions/index.ts +++ b/ui/src/logs/actions/index.ts @@ -13,15 +13,12 @@ import { buildBackwardLogQuery, parseHistogramQueryResponse, } from 'src/logs/utils' -import { - logConfigServerToUI, - // logConfigUIToServer -} from 'src/logs/utils/config' +import {logConfigServerToUI, logConfigUIToServer} from 'src/logs/utils/config' import {getDeep} from 'src/utils/wrappers' import { executeQueryAsync, - // getLogConfig as getLogConfigAJAX, - // updateLogConfig as updateLogConfigAJAX, + getLogConfig as getLogConfigAJAX, + updateLogConfig as updateLogConfigAJAX, } from 'src/logs/api' import {serverLogData} from 'src/logs/data/serverLogData' import {LogsState, Filter, TableData, LogConfig} from 'src/types/logs' @@ -715,8 +712,7 @@ export const getLogConfigAsync = (url: string) => async ( ): Promise => { url = url try { - // const {data} = await getLogConfigAJAX(url) - const data = serverLogData + const {data} = await getLogConfigAJAX(url) const logConfig = logConfigServerToUI(data) dispatch(setConfig(logConfig)) } catch (error) { @@ -729,8 +725,8 @@ export const updateLogConfigAsync = (url: string, config: LogConfig) => async ( ): Promise => { url = url try { - // const configForServer = logConfigUIToServer(config) - // await updateLogConfigAJAX(url, configForServer) + const configForServer = logConfigUIToServer(config) + await updateLogConfigAJAX(url, configForServer) dispatch(setConfig(config)) } catch (error) { console.error(error) From 5fae9f44a29d07cda34b3149dcacf806626a1687 Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 12 Jul 2018 10:03:17 -0700 Subject: [PATCH 3/8] Rename log config link and remove obsolete variable assignments --- ui/src/logs/actions/index.ts | 2 -- ui/src/logs/containers/LogsPage.tsx | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/ui/src/logs/actions/index.ts b/ui/src/logs/actions/index.ts index f97d3d0a89..8ec9ff8708 100644 --- a/ui/src/logs/actions/index.ts +++ b/ui/src/logs/actions/index.ts @@ -710,7 +710,6 @@ export const changeZoomAsync = (timeRange: TimeRange) => async ( export const getLogConfigAsync = (url: string) => async ( dispatch: Dispatch ): Promise => { - url = url try { const {data} = await getLogConfigAJAX(url) const logConfig = logConfigServerToUI(data) @@ -723,7 +722,6 @@ export const getLogConfigAsync = (url: string) => async ( export const updateLogConfigAsync = (url: string, config: LogConfig) => async ( dispatch: Dispatch ): Promise => { - url = url try { const configForServer = logConfigUIToServer(config) await updateLogConfigAJAX(url, configForServer) diff --git a/ui/src/logs/containers/LogsPage.tsx b/ui/src/logs/containers/LogsPage.tsx index 75cb946ab7..3f8c5de6bc 100644 --- a/ui/src/logs/containers/LogsPage.tsx +++ b/ui/src/logs/containers/LogsPage.tsx @@ -478,7 +478,7 @@ class LogsPage extends Component { const mapStateToProps = ({ sources, links: { - config: {logViewer}, + orgConfig: {logViewer}, }, logs: { newRowsAdded, From a4502422345e892bcdb4be404aa31af62cc49c8e Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 12 Jul 2018 10:05:01 -0700 Subject: [PATCH 4/8] Refactor update functions for severity level and format to be async --- ui/src/logs/containers/LogsPage.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ui/src/logs/containers/LogsPage.tsx b/ui/src/logs/containers/LogsPage.tsx index 3f8c5de6bc..893987ffed 100644 --- a/ui/src/logs/containers/LogsPage.tsx +++ b/ui/src/logs/containers/LogsPage.tsx @@ -438,19 +438,19 @@ class LogsPage extends Component { ) } - private handleUpdateSeverityLevels = ( + private handleUpdateSeverityLevels = async ( severityLevelColors: SeverityLevelColor[] - ): void => { + ): Promise => { const {logConfig} = this.props - this.props.updateConfig(this.logConfigLink, { + await this.props.updateConfig(this.logConfigLink, { ...logConfig, severityLevelColors, }) } - private handleUpdateSeverityFormat = (format: SeverityFormat): void => { + private handleUpdateSeverityFormat = async (format: SeverityFormat): Promise => { const {logConfig} = this.props - this.props.updateConfig(this.logConfigLink, { + await this.props.updateConfig(this.logConfigLink, { ...logConfig, severityFormat: format, }) @@ -466,9 +466,9 @@ class LogsPage extends Component { return severityFormat } - private handleUpdateColumns = (tableColumns: LogsTableColumn[]): void => { + private handleUpdateColumns = async (tableColumns: LogsTableColumn[]): Promise => { const {logConfig} = this.props - this.props.updateConfig(this.logConfigLink, { + await this.props.updateConfig(this.logConfigLink, { ...logConfig, tableColumns, }) From 933f669ed48e06226614ad6ce85a9c6e383a355c Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 12 Jul 2018 10:05:43 -0700 Subject: [PATCH 5/8] Switch name and value properties of severity color to match API data model --- ui/src/logs/utils/config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/logs/utils/config.ts b/ui/src/logs/utils/config.ts index 6ca36b42f2..eac31fb6e7 100644 --- a/ui/src/logs/utils/config.ts +++ b/ui/src/logs/utils/config.ts @@ -99,8 +99,8 @@ export const getLevelColorsFromColumn = ( ): SeverityLevelColor[] => { const colors = column.encodings.filter(e => e.type === EncodingTypes.color) return colors.map(c => { - const level: SeverityLevelOptions = SeverityLevelOptions[c.value] - const color: SeverityColorOptions = SeverityColorOptions[c.name] + const level: SeverityLevelOptions = SeverityLevelOptions[c.name] + const color: SeverityColorOptions = SeverityColorOptions[c.value] return {level, color} }) } @@ -171,7 +171,7 @@ export const getColorEncodings = ( levelColors: SeverityLevelColor[] ): ServerEncoding[] => { return levelColors.map(({color, level}) => { - return {type: EncodingTypes.color, name: color, value: level} + return {type: EncodingTypes.color, value: color, name: level} }) } From 4d41d664d77ea0e72f6ad02a12a5ba1f864d371b Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 12 Jul 2018 10:58:09 -0700 Subject: [PATCH 6/8] Switched value and color properties of log config in tests --- ui/test/fixtures/index.ts | 8 +++--- ui/test/logs/utils/config.test.ts | 48 +++++++++++++++---------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/ui/test/fixtures/index.ts b/ui/test/fixtures/index.ts index 0134d3a24d..94d80b1fa0 100644 --- a/ui/test/fixtures/index.ts +++ b/ui/test/fixtures/index.ts @@ -404,13 +404,13 @@ export const serverLogColumns: ServerColumn[] = [ }, { type: 'color', - value: 'alert', - name: 'pearl', + name: 'alert', + value: 'pearl', }, { type: 'color', - value: 'warning', - name: 'wolf', + name: 'warning', + value: 'wolf', }, ], }, diff --git a/ui/test/logs/utils/config.test.ts b/ui/test/logs/utils/config.test.ts index c120d1aacb..228aa218bf 100644 --- a/ui/test/logs/utils/config.test.ts +++ b/ui/test/logs/utils/config.test.ts @@ -48,13 +48,13 @@ const sortedServerColumns = () => { }, { type: 'color', - value: 'alert', - name: 'pearl', + name: 'alert', + value: 'pearl', }, { type: 'color', - value: 'warning', - name: 'wolf', + name: 'warning', + value: 'wolf', }, ], }, @@ -233,13 +233,13 @@ describe('Logs.Config', () => { }, { type: 'color', - name: 'pineapple', - value: 'emerg', + name: 'emerg', + value: 'pineapple', }, { type: 'color', - name: 'fire', - value: 'err', + name: 'err', + value: 'fire', }, ], } @@ -365,23 +365,23 @@ describe('Logs.Config', () => { const expectedEncodings = [ { type: 'color', - value: 'emerg', - name: SeverityColorOptions.pearl, + name: 'emerg', + value: SeverityColorOptions.pearl, }, { type: 'color', - value: 'alert', - name: SeverityColorOptions.mist, + name: 'alert', + value: SeverityColorOptions.mist, }, { type: 'color', - value: 'crit', - name: SeverityColorOptions.wolf, + name: 'crit', + value: SeverityColorOptions.wolf, }, { type: 'color', - value: 'err', - name: SeverityColorOptions.graphite, + name: 'err', + value: SeverityColorOptions.graphite, }, ] @@ -436,23 +436,23 @@ describe('Logs.Config', () => { }, { type: 'color', - value: 'emerg', - name: SeverityColorOptions.pearl, + name: 'emerg', + value: SeverityColorOptions.pearl, }, { type: 'color', - value: 'alert', - name: SeverityColorOptions.mist, + name: 'alert', + value: SeverityColorOptions.mist, }, { type: 'color', - value: 'crit', - name: SeverityColorOptions.wolf, + name: 'crit', + value: SeverityColorOptions.wolf, }, { type: 'color', - value: 'err', - name: SeverityColorOptions.graphite, + name: 'err', + value: SeverityColorOptions.graphite, }, ] From 1efc65ff4420af1b455f6c8ba2c8409e8072b218 Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 12 Jul 2018 11:09:09 -0700 Subject: [PATCH 7/8] Update Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6554aa031e..a8251ed18a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ 1. [#3556](https://github.com/influxdata/chronograf/pull/3556): Add ability to override template variables and time ranges via URL query 1. [#3814](https://github.com/influxdata/chronograf/pull/3814): Add pprof routes to chronograf server 1. [#3806](https://github.com/influxdata/chronograf/pull/3806): Add API to get/update Log Viewer UI config +1. [#3896](https://github.com/influxdata/chronograf/pull/3896): Consume new Log Viewer config API in client to allow user to configure log viewer UI for their organization ### UI Improvements From f6cf0c6ab5cf2f88c25669323bac432970934fd1 Mon Sep 17 00:00:00 2001 From: Alirie Gray Date: Thu, 12 Jul 2018 11:42:27 -0700 Subject: [PATCH 8/8] Fix tslint errors --- ui/src/logs/actions/index.ts | 1 - ui/src/logs/containers/LogsPage.tsx | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ui/src/logs/actions/index.ts b/ui/src/logs/actions/index.ts index 8ec9ff8708..bcf54eb29d 100644 --- a/ui/src/logs/actions/index.ts +++ b/ui/src/logs/actions/index.ts @@ -20,7 +20,6 @@ import { getLogConfig as getLogConfigAJAX, updateLogConfig as updateLogConfigAJAX, } from 'src/logs/api' -import {serverLogData} from 'src/logs/data/serverLogData' import {LogsState, Filter, TableData, LogConfig} from 'src/types/logs' export const INITIAL_LIMIT = 100 diff --git a/ui/src/logs/containers/LogsPage.tsx b/ui/src/logs/containers/LogsPage.tsx index 893987ffed..09b72d7ccd 100644 --- a/ui/src/logs/containers/LogsPage.tsx +++ b/ui/src/logs/containers/LogsPage.tsx @@ -448,7 +448,9 @@ class LogsPage extends Component { }) } - private handleUpdateSeverityFormat = async (format: SeverityFormat): Promise => { + private handleUpdateSeverityFormat = async ( + format: SeverityFormat + ): Promise => { const {logConfig} = this.props await this.props.updateConfig(this.logConfigLink, { ...logConfig, @@ -466,7 +468,9 @@ class LogsPage extends Component { return severityFormat } - private handleUpdateColumns = async (tableColumns: LogsTableColumn[]): Promise => { + private handleUpdateColumns = async ( + tableColumns: LogsTableColumn[] + ): Promise => { const {logConfig} = this.props await this.props.updateConfig(this.logConfigLink, { ...logConfig,