|
Glassfish example source code file (CollectLogFiles.java)
The Glassfish CollectLogFiles.java source code/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package com.sun.enterprise.server.logging.commands; import com.sun.common.util.logging.LoggingConfigImpl; import com.sun.enterprise.config.serverbeans.Domain; import com.sun.enterprise.config.serverbeans.Node; import com.sun.enterprise.config.serverbeans.Server; import com.sun.enterprise.server.logging.logviewer.backend.LogFilterForInstance; import com.sun.enterprise.util.LocalStringManagerImpl; import com.sun.enterprise.util.SystemPropertyConstants; import com.sun.logging.LogDomains; import org.glassfish.api.ActionReport; import org.glassfish.api.I18n; import org.glassfish.api.Param; import org.glassfish.api.admin.*; import org.jvnet.hk2.annotations.Inject; import org.jvnet.hk2.annotations.Scoped; import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.component.Habitat; import org.jvnet.hk2.component.PerLookup; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; /** * Created by IntelliJ IDEA. * User: naman * Date: 6 Jul, 2010 * Time: 3:27:24 PM * To change this template use File | Settings | File Templates. */ @ExecuteOn({RuntimeType.DAS}) @Service(name = "collect-log-files") @Scoped(PerLookup.class) @I18n("collect.log.files") public class CollectLogFiles implements AdminCommand { final private static LocalStringManagerImpl localStrings = new LocalStringManagerImpl(CollectLogFiles.class); private static final Logger logger = LogDomains.getLogger(CollectLogFiles.class, LogDomains.CORE_LOGGER); @Param(optional = true) String target = SystemPropertyConstants.DEFAULT_SERVER_INSTANCE_NAME; @Param(name = "retrieve", optional = true, defaultValue = "false") boolean retrieve; @Param(primary = true, optional = true, defaultValue = ".") private String retrieveFilePath; @Inject ServerEnvironment env; @Inject Domain domain; @Inject private Habitat habitat; @Inject LoggingConfigImpl loggingConfig; public void execute(AdminCommandContext context) { final ActionReport report = context.getActionReport(); Properties props = initFileXferProps(); Server targetServer = domain.getServerNamed(target); File retrieveFile = new File(retrieveFilePath); if (!retrieveFile.exists()) { boolean created = retrieveFile.mkdir(); if (!created) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.outputPath.notexist", "Retrieve File Path does not exist. Please enter correct value for Retrieve File Path."); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } } if (targetServer != null && targetServer.isDas()) { // This loop if target instance is DAS String zipFile = ""; File tempDirectory = null; try { tempDirectory = new File(env.getInstanceRoot(), "collected-logs"); if (!tempDirectory.exists()) tempDirectory.mkdirs(); } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingTempDirectory", "Error while creating temp directory on server for downloading log files."); logger.log(Level.SEVERE, errorMsg, ex); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } String targetDirPath = tempDirectory.getAbsolutePath() + File.separator + "logs"; File targetDir = new File(targetDirPath); if (!targetDir.exists()) targetDir.mkdir(); targetDirPath = tempDirectory.getAbsolutePath() + File.separator + "logs" + File.separator + targetServer.getName(); targetDir = new File(targetDirPath); targetDir.mkdir(); try { copyLogFilesForLocalhost(env.getDomainRoot() + File.separator + "logs", targetDir.getAbsolutePath(), report, targetServer.getName()); } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.errInstanceDownloading", "Error while downloading log files from {0}.",target); } try { zipFile = loggingConfig.createZipFile(tempDirectory.getAbsolutePath()); if (zipFile == null || new File(zipFile) == null) { // Failure during zip final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingZip", "Error while creating zip file {0}.",zipFile); report.setActionExitCode(ActionReport.ExitCode.FAILURE); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } } catch (Exception e) { // Catching Exception if any final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingZip", "Error while creating zip file {0}.",zipFile); logger.log(Level.SEVERE, errorMsg, e); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } if (this.retrieve) { retrieveFile(zipFile, context, tempDirectory, props, report); report.setMessage(localStrings.getLocalString( "collectlogfiles.instance.success", "Created Zip file under {0}.",retrieveFilePath + File.separator + new File(zipFile).getName())); } else { report.setMessage(localStrings.getLocalString( "collectlogfiles.instance.success", "Created Zip file under {0}.",zipFile)); } if (targetDir != null && targetDir.exists()) deleteDir(targetDir); } else if (targetServer != null && targetServer.isInstance()) { // This loop if target standalone instance String instanceName = targetServer.getName(); String serverNode = targetServer.getNodeRef(); Node node = domain.getNodes().getNode(serverNode); File tempDirectory = null; String zipFile = ""; File targetDir = null; try { tempDirectory = new File(env.getInstanceRoot(), "collected-logs"); if (!tempDirectory.exists()) tempDirectory.mkdirs(); } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingTempDirectory", "Error while creating temp directory on server for downloading log files."); logger.log(Level.SEVERE, errorMsg, ex); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } try { if (node.isLocal()) { String sourceDir = env.getInstanceRoot().getAbsolutePath() + File.separator + ".." + File.separator + ".." + File.separator + "nodes" + File.separator + serverNode + File.separator + instanceName + File.separator + "logs"; String targetDirPath = tempDirectory.getAbsolutePath() + File.separator + "logs"; targetDir = new File(targetDirPath); if (!targetDir.exists()) targetDir.mkdir(); targetDirPath = tempDirectory.getAbsolutePath() + File.separator + "logs" + File.separator + instanceName; targetDir = new File(targetDirPath); targetDir.mkdir(); copyLogFilesForLocalhost(sourceDir, targetDir.getAbsolutePath(), report, instanceName); } else { new LogFilterForInstance().downloadAllInstanceLogFiles(habitat, targetServer, domain, logger, instanceName, tempDirectory.getAbsolutePath()); } } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.errInstanceDownloading", "Error while downloading log files from {0}.",instanceName); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } try { // Creating zip file and returning zip file absolute path. zipFile = loggingConfig.createZipFile(tempDirectory.getAbsolutePath()); if (zipFile == null || new File(zipFile) == null) { // Failure during zip final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingZip", "Error while creating zip file {0}.",zipFile); report.setActionExitCode(ActionReport.ExitCode.FAILURE); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingZip", "Error while creating zip file {0}.",zipFile); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } if (this.retrieve) { retrieveFile(zipFile, context, tempDirectory, props, report); report.setMessage(localStrings.getLocalString( "collectlogfiles.instance.success", "Created Zip file under {0}.",retrieveFilePath + File.separator + new File(zipFile).getName())); } else { report.setMessage(localStrings.getLocalString( "collectlogfiles.instance.success", "Created Zip file under {0}.",zipFile)); } if (targetDir != null && targetDir.exists()) deleteDir(targetDir); } else { // This loop if target is cluster String finalMessage = ""; File tempDirectory = null; String zipFile = ""; File targetDir = null; try { tempDirectory = new File(env.getInstanceRoot(), "collected-logs"); if (!tempDirectory.exists()) tempDirectory.mkdirs(); } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingTempDirectory", "Error while creating temp directory on server for downloading log files."); logger.log(Level.SEVERE, errorMsg, ex); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } com.sun.enterprise.config.serverbeans.Cluster cluster = domain.getClusterNamed(target); List<Server> instances = cluster.getInstances(); int instanceCount = 0; int errorCount = 0; for (Server instance : instances) { // downloading log files for all instances which is part of cluster under temp directory. String instanceName = instance.getName(); String serverNode = instance.getNodeRef(); Node node = domain.getNodes().getNode(serverNode); boolean errorOccur = false; instanceCount++; try { if (node.isLocal()) { String sourceDir = env.getInstanceRoot().getAbsolutePath() + File.separator + ".." + File.separator + ".." + File.separator + "nodes" + File.separator + serverNode + File.separator + instanceName + File.separator + "logs"; String targetDirPath = tempDirectory.getAbsolutePath() + File.separator + "logs"; targetDir = new File(targetDirPath); if (!targetDir.exists()) targetDir.mkdir(); targetDirPath = tempDirectory.getAbsolutePath() + File.separator + "logs" + File.separator + instanceName; targetDir = new File(targetDirPath); targetDir.mkdir(); copyLogFilesForLocalhost(sourceDir, targetDir.getAbsolutePath(), report, instanceName); } else { new LogFilterForInstance().downloadAllInstanceLogFiles(habitat, instance, domain, logger, instanceName, tempDirectory.getAbsolutePath()); } } catch (Exception ex) { errorCount++; final String errorMsg = localStrings.getLocalString( "collectlogfiles.errInstanceDownloading", "Error while downloading log files from {0}.",instanceName); errorOccur = true; finalMessage += errorMsg + "\n"; } if (!errorOccur) { final String successMsg = localStrings.getLocalString( "collectlogfiles.successInstanceDownloading", "Log files are downloaded for {0}.",instanceName); finalMessage += successMsg + "\n"; } } report.setMessage(finalMessage); if (instanceCount != errorCount) { try { // Creating zip file and returning zip file absolute path. zipFile = loggingConfig.createZipFile(tempDirectory.getAbsolutePath()); if (zipFile == null || new File(zipFile) == null) { // Failure during zip final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingZip", "Error while creating zip file {0}.",zipFile); report.setActionExitCode(ActionReport.ExitCode.FAILURE); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.creatingZip", "Error while creating zip file {0}.",zipFile); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } if (this.retrieve) { retrieveFile(zipFile, context, tempDirectory, props, report); report.setMessage(localStrings.getLocalString( "collectlogfiles.cluster.success","{0} Created Zip file under {1}.",finalMessage,retrieveFilePath + File.separator + new File(zipFile).getName())); } else { report.setMessage(localStrings.getLocalString( "collectlogfiles.cluster.success","{0} Created Zip file under {1}.",finalMessage,zipFile)); } report.setActionExitCode(ActionReport.ExitCode.SUCCESS); } else if(instanceCount==0) { report.setMessage(localStrings.getLocalString( "collectlogfiles.noinstance","No instances are defined as part of {0}. So there are no files to zip.",target)); report.setActionExitCode(ActionReport.ExitCode.FAILURE); } else { report.setActionExitCode(ActionReport.ExitCode.FAILURE); } if (targetDir != null && targetDir.exists()) deleteDir(targetDir); } } private void copyLogFilesForLocalhost(String sourceDir, String targetDir, ActionReport report, String instanceName) throws IOException { // Getting all Log Files File logsDir = new File(sourceDir); File allLogFileNames[] = logsDir.listFiles(); if (allLogFileNames == null) { throw new IOException(""); } for (File logFile : allLogFileNames) { if (logFile.isFile()) { // File to copy in output file path. File toFile = new File(targetDir, logFile.getName()); FileInputStream from = null; FileOutputStream to = null; // Copying File try { from = new FileInputStream(logFile); to = new FileOutputStream(toFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = from.read(buffer)) != -1) to.write(buffer, 0, bytesRead); // write } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.errInstanceDownloading", "Error while downloading log file from {0}.",instanceName); logger.log(Level.SEVERE, errorMsg, ex); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } if (!toFile.exists()) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.errInstanceDownloading", "Error while downloading log file from {0}.",instanceName); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } } } } private Properties initFileXferProps() { final Properties props = new Properties(); props.setProperty("file-xfer-root", retrieveFilePath.replace("\\", "/")); return props; } private void retrieveFile(String zipFileName, AdminCommandContext context, File tempDirectory, Properties props, ActionReport report) { // Playing with outbound payload to attach zip file.. Payload.Outbound outboundPayload = context.getOutboundPayload(); //code to attach zip file to output directory try { File zipFile = new File(zipFileName); outboundPayload.attachFile( "application/octet-stream", tempDirectory.toURI().relativize(zipFile.toURI()), "files", props, zipFile); } catch (Exception ex) { final String errorMsg = localStrings.getLocalString( "collectlogfiles.copyingZip", "Error while copying zip file to {0}.",retrieveFilePath); logger.log(Level.SEVERE, errorMsg, ex); report.setMessage(errorMsg); report.setActionExitCode(ActionReport.ExitCode.FAILURE); return; } } public boolean deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } // The directory is now empty so delete it return dir.delete(); } } Other Glassfish examples (source code examples)Here is a short list of links related to this Glassfish CollectLogFiles.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.