Skip to content

Commit 12d4439

Browse files
authored
Merge pull request #217 from arangodb/feature/dashboard-other-operators
Add links to other operators in dashboard menu
2 parents 65cc238 + 4484172 commit 12d4439

File tree

14 files changed

+370
-99
lines changed

14 files changed

+370
-99
lines changed

dashboard/assets.go

Lines changed: 49 additions & 49 deletions
Large diffs are not rendered by default.

dashboard/src/App.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Container, Segment, Message } from 'semantic-ui-react';
1+
import { Container, Segment, Menu, Message } from 'semantic-ui-react';
22
import React, { Component } from 'react';
33
import ReactTimeout from 'react-timeout';
44

@@ -19,7 +19,14 @@ const PodInfoView = ({pod, namespace}) => (
1919
</Segment>
2020
);
2121

22-
const OperatorsView = ({error, deployment, deploymentReplication, storage, pod, namespace}) => {
22+
const OperatorsView = ({error, deployment, deploymentReplication, storage, pod, namespace, otherOperators}) => {
23+
let commonMenuItems = otherOperators.map((item) => <Menu.Item><a href={item.url}>{operatorType2Name(item.type)}</a></Menu.Item>);
24+
if (commonMenuItems.length > 0) {
25+
commonMenuItems = (<Menu.Item>
26+
<Menu.Header>Other operators</Menu.Header>
27+
<Menu.Menu>{commonMenuItems}</Menu.Menu>
28+
</Menu.Item>);
29+
}
2330
let Operator = NoOperator;
2431
if (deployment)
2532
Operator = DeploymentOperator;
@@ -30,11 +37,25 @@ const OperatorsView = ({error, deployment, deploymentReplication, storage, pod,
3037
return (
3138
<Operator
3239
podInfoView={<PodInfoView pod={pod} namespace={namespace} />}
40+
commonMenuItems={commonMenuItems}
3341
error={error}
3442
/>
3543
);
3644
}
3745

46+
const operatorType2Name = (oType) => {
47+
switch (oType) {
48+
case "deployment":
49+
return "Deployments";
50+
case "deployment_replication":
51+
return "Deployment replications";
52+
case "storage":
53+
return "Storage";
54+
default:
55+
return "";
56+
}
57+
};
58+
3859
const LoadingView = () => (
3960
<Container>
4061
<Loading/>
@@ -76,6 +97,7 @@ class App extends Component {
7697
deployment={this.state.operators.deployment}
7798
deploymentReplication={this.state.operators.deployment_replication}
7899
storage={this.state.operators.storage}
100+
otherOperators={this.state.operators.other || []}
79101
pod={this.state.operators.pod}
80102
namespace={this.state.operators.namespace}
81103
/>;

dashboard/src/deployment/DeploymentOperator.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,16 @@ class DeploymentOperator extends Component {
3434
{doLogout =>
3535
<StyledMenu fixed="left" vertical>
3636
<Menu.Item>
37-
<Link to="/">Deployments</Link>
38-
</Menu.Item>
39-
<Menu.Item position="right" onClick={() => doLogout()}>
40-
Logout
37+
<Menu.Header>Deployment Operator</Menu.Header>
38+
<Menu.Menu>
39+
<Menu.Item>
40+
<Link to="/">Deployments</Link>
41+
</Menu.Item>
42+
<Menu.Item position="right" onClick={() => doLogout()}>
43+
Logout
44+
</Menu.Item>
45+
</Menu.Menu>
46+
{this.props.commonMenuItems}
4147
</Menu.Item>
4248
</StyledMenu>
4349
}

dashboard/src/replication/DeploymentReplicationOperator.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,17 @@ class DeploymentReplicationOperator extends Component {
3434
{doLogout =>
3535
<StyledMenu fixed="left" vertical>
3636
<Menu.Item>
37-
<Link to="/">Deployment replications</Link>
38-
</Menu.Item>
39-
<Menu.Item position="right" onClick={() => doLogout()}>
40-
Logout
37+
<Menu.Header>Deployment Replication Operator</Menu.Header>
38+
<Menu.Menu>
39+
<Menu.Item>
40+
<Link to="/">Deployment replications</Link>
41+
</Menu.Item>
42+
<Menu.Item position="right" onClick={() => doLogout()}>
43+
Logout
44+
</Menu.Item>
45+
</Menu.Menu>
4146
</Menu.Item>
47+
{this.props.commonMenuItems}
4248
</StyledMenu>
4349
}
4450
</LogoutContext.Consumer>

dashboard/src/storage/StorageOperator.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,20 @@ class StorageOperator extends Component {
2020
<div>
2121
<LogoutContext.Consumer>
2222
{doLogout =>
23-
<StyledMenu fixed="left" vertical>
23+
<StyledMenu fixed="left" vertical>
2424
<Menu.Item>
25-
Local storages
25+
<Menu.Header>Deployment Operator</Menu.Header>
26+
<Menu.Menu>
27+
<Menu.Item>
28+
Local storages
29+
</Menu.Item>
30+
<Menu.Item position="right" onClick={() => doLogout()}>
31+
Logout
32+
</Menu.Item>
33+
</Menu.Menu>
34+
{this.props.commonMenuItems}
2635
</Menu.Item>
27-
<Menu.Item position="right" onClick={() => doLogout()}>
28-
Logout
29-
</Menu.Item>
30-
</StyledMenu>
36+
</StyledMenu>
3137
}
3238
</LogoutContext.Consumer>
3339
<StyledContentBox>

manifests/templates/deployment-replication/rbac.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ rules:
3030
resources: ["pods", "services", "endpoints", "persistentvolumeclaims", "events", "secrets"]
3131
verbs: ["*"]
3232
- apiGroups: [""]
33-
resources: ["nodes"]
34-
verbs: ["get"]
33+
resources: ["namespaces", "nodes"]
34+
verbs: ["get", "list"]
3535
- apiGroups: ["apps"]
3636
resources: ["deployments", "replicasets"]
3737
verbs: ["get"]

manifests/templates/deployment/rbac.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ rules:
2727
resources: ["pods", "services", "endpoints", "persistentvolumeclaims", "events", "secrets"]
2828
verbs: ["*"]
2929
- apiGroups: [""]
30-
resources: ["nodes"]
31-
verbs: ["get"]
30+
resources: ["namespaces", "nodes"]
31+
verbs: ["get", "list"]
3232
- apiGroups: ["apps"]
3333
resources: ["deployments", "replicasets"]
3434
verbs: ["get"]

manifests/templates/storage/rbac.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ rules:
3333
- apiGroups: [""]
3434
resources: ["secrets"]
3535
verbs: ["get"]
36+
- apiGroups: [""]
37+
resources: ["namespaces", "nodes"]
38+
verbs: ["get", "list"]
3639
- apiGroups: ["apps"]
3740
resources: ["daemonsets"]
3841
verbs: ["*"]

pkg/deployment/server_api.go

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@
2323
package deployment
2424

2525
import (
26-
"fmt"
27-
"net"
2826
"sort"
29-
"strconv"
3027

3128
"k8s.io/api/core/v1"
3229
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -197,28 +194,25 @@ func (d *Deployment) DatabaseURL() string {
197194
if err != nil {
198195
return ""
199196
}
200-
host := ""
201-
switch svc.Spec.Type {
202-
case v1.ServiceTypeLoadBalancer:
203-
for _, i := range svc.Status.LoadBalancer.Ingress {
204-
if i.Hostname != "" {
205-
host = i.Hostname
206-
} else {
207-
host = i.IP
208-
}
209-
break
210-
}
211-
case v1.ServiceTypeNodePort:
212-
// TODO
213-
}
214-
if host == "" {
215-
return ""
216-
}
217197
scheme := "https"
218198
if !d.GetSpec().IsSecure() {
219199
scheme = "http"
220200
}
221-
return fmt.Sprintf("%s://%s", scheme, net.JoinHostPort(host, strconv.Itoa(k8sutil.ArangoPort)))
201+
nodeFetcher := func() (v1.NodeList, error) {
202+
result, err := d.deps.KubeCli.CoreV1().Nodes().List(metav1.ListOptions{})
203+
if err != nil {
204+
return v1.NodeList{}, maskAny(err)
205+
}
206+
return *result, nil
207+
}
208+
portPredicate := func(p v1.ServicePort) bool {
209+
return p.TargetPort.IntValue() == k8sutil.ArangoPort
210+
}
211+
url, err := k8sutil.CreateServiceURL(*svc, scheme, portPredicate, nodeFetcher)
212+
if err != nil {
213+
return ""
214+
}
215+
return url
222216
}
223217

224218
// DatabaseVersion returns the version used by the deployment

pkg/logging/logger.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ var (
3636
// The defaultLevels list is used during development to increase the
3737
// default level for components that we care a little less about.
3838
defaultLevels = map[string]string{
39-
"operator": "info",
40-
//"something.status": "info",
39+
//"operator": "info",
40+
//"something.status": "info",
4141
}
4242
)
4343

0 commit comments

Comments
 (0)