-
Notifications
You must be signed in to change notification settings - Fork 138
/
ListContainersCommand.java
122 lines (105 loc) · 5.49 KB
/
ListContainersCommand.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
* Copyright (c) 2006, 2018 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.enterprise.v3.admin;
import org.glassfish.api.ActionReport;
import org.glassfish.api.I18n;
import org.glassfish.api.admin.AccessRequired;
import org.glassfish.api.admin.AdminCommand;
import org.glassfish.api.admin.AdminCommandContext;
import org.glassfish.api.admin.CommandLock;
import org.glassfish.api.admin.RestEndpoint;
import org.glassfish.api.admin.RestEndpoints;
import org.glassfish.api.container.Sniffer;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.internal.data.ContainerRegistry;
import org.glassfish.internal.data.EngineInfo;
import org.jvnet.hk2.annotations.Service;
import com.sun.enterprise.config.serverbeans.Application;
import com.sun.enterprise.config.serverbeans.Applications;
import com.sun.enterprise.config.serverbeans.Domain;
import com.sun.enterprise.config.serverbeans.Engine;
import com.sun.enterprise.module.HK2Module;
import com.sun.enterprise.module.ModulesRegistry;
import com.sun.enterprise.util.LocalStringManagerImpl;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
/**
* This admin command list the containers currentely running within that Glassfish instance
*/
@Service(name = "list-containers")
@Singleton // no per-execution state
@CommandLock(CommandLock.LockType.NONE)
@I18n("list.containers.command")
@RestEndpoints({
@RestEndpoint(configBean = Domain.class, opType = RestEndpoint.OpType.GET, path = "list-containers", description = "list-containers") })
@AccessRequired(resource = "domain", action = "read")
public class ListContainersCommand implements AdminCommand {
final private static LocalStringManagerImpl localStrings = new LocalStringManagerImpl(ListContainersCommand.class);
@Inject
ContainerRegistry containerRegistry;
@Inject
ModulesRegistry modulesRegistry;
@Inject
ServiceLocator habitat;
@Inject
Applications applications;
@Override
public void execute(AdminCommandContext context) {
ActionReport report = context.getActionReport();
report.setActionDescription(localStrings.getLocalString("list.containers.command", "List of Containers"));
report.setActionExitCode(ActionReport.ExitCode.SUCCESS);
ActionReport.MessagePart top = report.getTopMessagePart();
top.setMessage(localStrings.getLocalString("list.containers.command", "List of Containers"));
top.setChildrenType(localStrings.getLocalString("container", "Container"));
Iterable<? extends Sniffer> sniffers = habitat.getAllServices(Sniffer.class);
if (sniffers == null) {
top.setMessage(localStrings.getLocalString("list.containers.nocontainer", "No container currently configured"));
} else {
for (Sniffer sniffer : sniffers) {
ActionReport.MessagePart container = top.addChild();
container.setMessage(sniffer.getModuleType());
container.addProperty(localStrings.getLocalString("contractprovider", "ContractProvider"), sniffer.getModuleType());
EngineInfo engineInfo = containerRegistry.getContainer(sniffer.getModuleType());
if (engineInfo != null) {
container.addProperty(localStrings.getLocalString("status", "Status"),
localStrings.getLocalString("started", "Started"));
HK2Module connectorModule = modulesRegistry.find(engineInfo.getSniffer().getClass());
container.addProperty(localStrings.getLocalString("connector", "Connector"),
connectorModule.getModuleDefinition().getName() + ":" + connectorModule.getModuleDefinition().getVersion());
container.addProperty(localStrings.getLocalString("implementation", "Implementation"),
engineInfo.getContainer().getClass().toString());
boolean atLeastOne = false;
for (Application app : applications.getApplications()) {
for (com.sun.enterprise.config.serverbeans.Module module : app.getModule()) {
Engine engine = module.getEngine(engineInfo.getSniffer().getModuleType());
if (engine != null) {
if (!atLeastOne) {
atLeastOne = true;
container.setChildrenType(
localStrings.getLocalString("list.containers.listapps", "Applications deployed"));
}
container.addChild().setMessage(app.getName());
}
}
}
if (!atLeastOne) {
container.addProperty("Status", "Not Started");
}
}
}
}
}
}