/**
* Copyright (c) 2009--2014 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.frontend.action.systems.sdc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import com.redhat.rhn.domain.action.Action;
import com.redhat.rhn.domain.action.ActionFactory;
import com.redhat.rhn.domain.server.CPU;
import com.redhat.rhn.domain.server.Device;
import com.redhat.rhn.domain.server.NetworkInterface;
import com.redhat.rhn.domain.server.Server;
import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.domain.server.ServerNetAddress6;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.frontend.struts.RhnAction;
import com.redhat.rhn.frontend.struts.RhnHelper;
import com.redhat.rhn.frontend.taglibs.list.ListTagHelper;
import com.redhat.rhn.manager.action.ActionManager;
import com.redhat.rhn.manager.system.SystemManager;
/**
* SystemHardwareAction handles the interaction of the ChannelDetails page.
* @version $Rev$
*/
public class SystemHardwareAction extends RhnAction {
public static final String SID = "sid";
/** {@inheritDoc} */
public ActionForward execute(ActionMapping mapping,
ActionForm formIn,
HttpServletRequest request,
HttpServletResponse response) {
DynaActionForm form = (DynaActionForm)formIn;
RequestContext ctx = new RequestContext(request);
User user = ctx.getCurrentUser();
Map params = makeParamMap(request);
String fwd = RhnHelper.DEFAULT_FORWARD;
Long sid = ctx.getRequiredParam(RequestContext.SID);
Server server = SystemManager.lookupByIdAndUser(sid, user);
CPU cpu = server.getCpu();
Date now = new Date();
request.setAttribute(SID, sid);
if (isSubmitted(form)) {
if (ctx.hasParam("update_interface")) {
server.setPrimaryInterfaceWithName(form.get("primaryInterface").toString());
createSuccessMessage(request, "message.interfaceSet",
form.get("primaryInterface").toString());
}
else {
Action a = ActionManager.scheduleHardwareRefreshAction(user, server, now);
ActionFactory.save(a);
createSuccessMessage(request, "message.refeshScheduled", server.getName());
// No idea why I have to do this :(
params.put(SID, sid);
fwd = "success";
}
}
setupForm(request, cpu, server, form);
SdcHelper.ssmCheck(request, server.getId(), user);
return getStrutsDelegate().forwardParams(
mapping.findForward(fwd), params);
}
private void setupForm(HttpServletRequest request, CPU cpu, Server server,
DynaActionForm daForm) {
if (server.findPrimaryNetworkInterface() != null) {
daForm.set("primaryInterface", server.findPrimaryNetworkInterface().getName());
request.setAttribute("primaryInterface",
server.findPrimaryNetworkInterface().getName());
}
if (server.getActiveNetworkInterfaces() != null) {
request.setAttribute("networkInterfaces", getNetworkInterfaces(server));
}
request.setAttribute("system", server);
if (cpu != null) {
request.setAttribute("cpu_model", cpu.getModel());
request.setAttribute("cpu_count", cpu.getNrCPU());
request.setAttribute("cpu_mhz", cpu.getMHz());
request.setAttribute("cpu_vendor", cpu.getVendor());
request.setAttribute("cpu_stepping", cpu.getStepping());
request.setAttribute("cpu_family", cpu.getFamily());
request.setAttribute("cpu_arch", server.getServerArch().getName());
request.setAttribute("cpu_cache", cpu.getCache());
request.setAttribute("cpu_sockets", cpu.getNrsocket());
request.setAttribute("cpu_cores", cpu.getNrCPU());
}
request.setAttribute("system_ram", server.getRam());
request.setAttribute("system_swap", server.getSwap());
StringBuilder dmiBios = new StringBuilder();
if (server.getDmi() != null) {
if (server.getDmi().getBios() != null) {
if (StringUtils.isNotEmpty(server.getDmi().getBios().getVendor())) {
dmiBios.append(server.getDmi().getBios().getVendor() + " ");
}
if (StringUtils.isNotEmpty(server.getDmi().getBios().getVersion())) {
dmiBios.append(server.getDmi().getBios().getVersion() + " ");
}
if (StringUtils.isNotEmpty(server.getDmi().getBios().getRelease())) {
dmiBios.append(server.getDmi().getBios().getRelease());
}
}
request.setAttribute("dmi_vendor", server.getDmi().getVendor());
request.setAttribute("dmi_system", server.getDmi().getSystem());
request.setAttribute("dmi_product", server.getDmi().getProduct());
request.setAttribute("dmi_bios", dmiBios.toString());
request.setAttribute("dmi_asset_tag", server.getDmi().getAsset());
request.setAttribute("dmi_board", server.getDmi().getBoard());
}
request.setAttribute("network_hostname", server.getDecodedHostname());
request.setAttribute("network_ip_addr", server.getIpAddress());
request.setAttribute("network_ip6_addr", server.getIp6Address());
request.setAttribute("network_cnames", server.getDecodedCnames());
List<String> nicList = new ArrayList();
for (NetworkInterface n : server.getNetworkInterfaces()) {
nicList.add(n.getName());
}
Collections.sort(nicList);
List nicList2 = new ArrayList();
for (String nicName : nicList) {
Map nic = new HashMap();
NetworkInterface n = server.getNetworkInterface(nicName);
nic.put("name", n.getName());
nic.put("ip", n.getIpaddr());
nic.put("netmask", n.getNetmask());
nic.put("broadcast", n.getBroadcast());
nic.put("hwaddr", n.getHwaddr());
nic.put("module", n.getModule());
nicList2.add(nic);
}
request.setAttribute("network_interfaces", nicList2);
List nicList3 = new ArrayList();
for (String nicName : nicList) {
NetworkInterface n = server.getNetworkInterface(nicName);
for (ServerNetAddress6 na6 : n.getIPv6Addresses()) {
Map nic = new HashMap();
nic.put("name", n.getName());
nic.put("hwaddr", n.getHwaddr());
nic.put("module", n.getModule());
nic.put("ip6", na6.getAddress());
nic.put("netmask", na6.getNetmask());
nic.put("scope", na6.getScope());
nicList3.add(nic);
}
}
request.setAttribute("ipv6_network_interfaces", nicList3);
List miscDevices = new ArrayList();
List videoDevices = new ArrayList();
List audioDevices = new ArrayList();
List captureDevices = new ArrayList();
List usbDevices = new ArrayList();
for (Device d : server.getDevices()) {
Map device = new HashMap();
String desc = null;
String vendor = null;
if (d.getDescription() != null) {
StringTokenizer st = new StringTokenizer(d.getDescription(), "|");
vendor = st.nextToken();
if (st.hasMoreTokens()) {
desc = st.nextToken();
}
}
if (desc != null) {
device.put("description", desc);
device.put("vendor", vendor);
}
else {
device.put("description", d.getDescription());
}
device.put("bus", d.getBus());
device.put("detached", d.getDetached().toString());
device.put("device", d.getDevice());
device.put("driver", d.getDriver());
device.put("pcitype", d.getPcitype().toString());
if (d.getDeviceClass().equals("HD")) {
continue;
}
else if (d.getDeviceClass().equals("VIDEO")) {
videoDevices.add(device);
}
else if (d.getDeviceClass().equals("USB")) {
usbDevices.add(device);
}
else if (d.getDeviceClass().equals("AUDIO")) {
audioDevices.add(device);
}
else if (d.getDeviceClass().equals("CAPTURE")) {
captureDevices.add(device);
}
else {
if (!d.getBus().equals("MISC")) {
miscDevices.add(device);
}
}
}
List storageDevices = new ArrayList();
for (Device hd : ServerFactory.lookupStorageDevicesByServer(server)) {
Device d = hd;
Map device = new HashMap();
device.put("description", d.getDescription());
device.put("device", d.getDevice());
device.put("bus", d.getBus());
storageDevices.add(device);
}
request.setAttribute("storageDevices", storageDevices);
request.setAttribute("videoDevices", videoDevices);
request.setAttribute("audioDevices", audioDevices);
request.setAttribute("miscDevices", miscDevices);
request.setAttribute("usbDevices", usbDevices);
request.setAttribute("captureDevices", captureDevices);
request.setAttribute(ListTagHelper.PARENT_URL, request.getRequestURI());
}
private List getNetworkInterfaces(Server s) {
List pages = new ArrayList();
for (NetworkInterface ni : s.getActiveNetworkInterfaces()) {
String istr = ni.getName();
pages.add(createDisplayMap(istr, istr));
}
return pages;
}
private Map createDisplayMap(String display, String value) {
Map selection = new HashMap();
selection.put("display", display);
selection.put("value", value);
return selection;
}
}