/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package util.support; import com.emc.vipr.client.ViPRCoreClient; import org.apache.commons.io.IOUtils; import org.apache.commons.io.output.CloseShieldOutputStream; import play.Logger; import play.jobs.Job; import play.mvc.Http; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Objects; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class SupportAuditPackageCreator { private static final String TIMESTAMP = "ddMMyy-HHmm"; private String timeBucket = null; private Date startTime = null; private Date endTime = null; private String svcType = null; private String user = null; private String result = null; private String keyword = null; private String language = "en_US"; private Http.Request request; private ViPRCoreClient client; public SupportAuditPackageCreator(Http.Request request, ViPRCoreClient client) { this.request = request; this.client = Objects.requireNonNull(client); } public String getTimeBucket() { return timeBucket; } public void setTimeBucket(String timeBucket) { this.timeBucket = timeBucket; } public Date getStartTime() { return startTime; } public void setStartTime(Date startTime) { this.startTime = startTime; } public Date getEndTime() { return endTime; } public void setEndTime(Date endTime) { this.endTime = endTime; } public String getSvcType() { return svcType; } public void setSvcType(String svcType) { this.svcType = svcType; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } public String getKeyword() { return keyword; } public void setKeyword(String keyword) { this.keyword = keyword; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } private ViPRCoreClient api() { return client; } public static String formatTimestamp(Calendar cal) { final SimpleDateFormat TIME1 = new SimpleDateFormat(TIMESTAMP); return cal != null ? TIME1.format(cal.getTime()) : "UNKNOWN"; } public CreateSupportPackageJob createJob(OutputStream out) { return new CreateSupportPackageJob(out, this); } public void writeTo(OutputStream out) throws IOException { ZipOutputStream zip = new ZipOutputStream(out); try { writeLogs(zip); zip.flush(); } finally { zip.close(); } } private OutputStream nextEntry(ZipOutputStream zip, String path) throws IOException { Logger.debug("Adding entry: %s", path); ZipEntry entry = new ZipEntry(path); zip.putNextEntry(entry); return new CloseShieldOutputStream(zip); } private void writeLogs(ZipOutputStream zip) throws IOException { String path = "audit.log"; OutputStream stream = nextEntry(zip, path); InputStream in = api().audit().getAsText(startTime, endTime, svcType, user, result, keyword, language); try { IOUtils.copy(in, stream); } finally { in.close(); stream.close(); } } /** * Job that runs to generate a support package. */ public static class CreateSupportPackageJob extends Job { private OutputStream out; private SupportAuditPackageCreator supportPackage; public CreateSupportPackageJob(OutputStream out, SupportAuditPackageCreator supportPackage) { this.out = out; this.supportPackage = supportPackage; } @Override public void doJob() throws Exception { supportPackage.writeTo(out); } } }