View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.syncope.client.console.pages;
20  
21  import de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
22  import java.util.ArrayList;
23  import java.util.Collection;
24  import java.util.Comparator;
25  import java.util.List;
26  import java.util.stream.Collectors;
27  import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
28  import org.apache.syncope.client.console.panels.LogsPanel;
29  import org.apache.syncope.client.console.rest.LoggerConf;
30  import org.apache.syncope.client.console.rest.LoggerConfOp;
31  import org.apache.syncope.client.console.rest.LoggerConfRestClient;
32  import org.apache.syncope.common.keymaster.client.api.DomainOps;
33  import org.apache.syncope.common.keymaster.client.api.ServiceOps;
34  import org.apache.syncope.common.keymaster.client.api.model.Domain;
35  import org.apache.syncope.common.keymaster.client.api.model.NetworkService;
36  import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
37  import org.apache.wicket.extensions.markup.html.tabs.ITab;
38  import org.apache.wicket.markup.html.WebMarkupContainer;
39  import org.apache.wicket.markup.html.panel.Panel;
40  import org.apache.wicket.model.Model;
41  import org.apache.wicket.request.mapper.parameter.PageParameters;
42  import org.apache.wicket.spring.injection.annot.SpringBean;
43  import org.springframework.boot.logging.LogLevel;
44  import org.springframework.boot.logging.LoggerConfiguration;
45  import org.springframework.boot.logging.LoggingSystem;
46  
47  public class Logs extends BasePage {
48  
49      private static final long serialVersionUID = -1100228004207271271L;
50  
51      @SpringBean
52      private ServiceOps serviceOps;
53  
54      @SpringBean
55      private DomainOps domainOps;
56  
57      @SpringBean
58      private LoggingSystem loggingSystem;
59  
60      public Logs(final PageParameters parameters) {
61          super(parameters);
62  
63          body.add(BookmarkablePageLinkBuilder.build("dashboard", "dashboardBr", Dashboard.class));
64          WebMarkupContainer content = new WebMarkupContainer("content");
65          content.setOutputMarkupId(true);
66          content.add(new AjaxBootstrapTabbedPanel<>("tabbedPanel", buildTabList()));
67          body.add(content);
68      }
69  
70      private List<ITab> buildTabList() {
71          List<ITab> tabs = new ArrayList<>();
72  
73          List<Domain> domains = domainOps.list();
74  
75          List<NetworkService> coreInstances = serviceOps.list(NetworkService.Type.CORE);
76          tabs.add(new AbstractTab(Model.of(NetworkService.Type.CORE.name())) {
77  
78              private static final long serialVersionUID = -6815067322125799251L;
79  
80              @Override
81              public Panel getPanel(final String panelId) {
82                  return new LogsPanel(panelId, new LoggerConfRestClient(coreInstances, domains), getPageReference());
83              }
84          });
85  
86          tabs.add(new AbstractTab(Model.of(NetworkService.Type.CONSOLE.name())) {
87  
88              private static final long serialVersionUID = -6815067322125799251L;
89  
90              @Override
91              public Panel getPanel(final String panelId) {
92                  return new LogsPanel(panelId, new LoggerConfOp() {
93  
94                      private static final long serialVersionUID = 24740659553491L;
95  
96                      @Override
97                      public List<LoggerConf> list() {
98                          Collection<LoggerConfiguration> configurations = loggingSystem.getLoggerConfigurations();
99                          if (configurations == null) {
100                             return List.of();
101                         }
102 
103                         return configurations.stream().map(conf -> {
104                             LoggerConf loggerConf = new LoggerConf();
105                             loggerConf.setKey(conf.getName());
106                             loggerConf.setLevel(conf.getEffectiveLevel());
107                             return loggerConf;
108                         }).sorted(Comparator.comparing(LoggerConf::getKey)).collect(Collectors.toList());
109                     }
110 
111                     @Override
112                     public void setLevel(final String key, final LogLevel level) {
113                         loggingSystem.setLogLevel(key, level);
114                     }
115                 }, getPageReference());
116             }
117         });
118 
119         List<NetworkService> euInstances = serviceOps.list(NetworkService.Type.ENDUSER);
120         if (!euInstances.isEmpty()) {
121             tabs.add(new AbstractTab(Model.of(NetworkService.Type.ENDUSER.name())) {
122 
123                 private static final long serialVersionUID = -6815067322125799251L;
124 
125                 @Override
126                 public Panel getPanel(final String panelId) {
127                     return new LogsPanel(panelId, new LoggerConfRestClient(euInstances, domains), getPageReference());
128                 }
129             });
130         }
131 
132         List<NetworkService> waInstances = serviceOps.list(NetworkService.Type.WA);
133         if (!waInstances.isEmpty()) {
134             tabs.add(new AbstractTab(Model.of(NetworkService.Type.WA.name())) {
135 
136                 private static final long serialVersionUID = -6815067322125799251L;
137 
138                 @Override
139                 public Panel getPanel(final String panelId) {
140                     return new LogsPanel(panelId, new LoggerConfRestClient(waInstances, domains), getPageReference());
141                 }
142             });
143         }
144 
145         List<NetworkService> sraInstances = serviceOps.list(NetworkService.Type.SRA);
146         if (!sraInstances.isEmpty()) {
147             tabs.add(new AbstractTab(Model.of(NetworkService.Type.SRA.name())) {
148 
149                 private static final long serialVersionUID = -6815067322125799251L;
150 
151                 @Override
152                 public Panel getPanel(final String panelId) {
153                     return new LogsPanel(panelId, new LoggerConfRestClient(sraInstances, domains), getPageReference());
154                 }
155             });
156         }
157 
158         return tabs;
159     }
160 }