Repository: openmeetings Updated Branches: refs/heads/4.0.x 0b0506b93 -> 1093049c0
[OPENMEETINGS-1808] strip audio is marked as optional during conversion Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/1093049c Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/1093049c Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/1093049c Branch: refs/heads/4.0.x Commit: 1093049c0465965b1145d394a5e446679f267a00 Parents: 0b0506b Author: Maxim Solodovnik <[email protected]> Authored: Fri Dec 29 10:45:20 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Fri Dec 29 10:45:20 2017 +0700 ---------------------------------------------------------------------- .../core/converter/BaseConverter.java | 17 ++++---- .../db/dao/file/FileItemLogDao.java | 17 ++++---- .../db/entity/file/FileItemLog.java | 35 ++++++++++++---- .../util/process/ProcessHelper.java | 43 ++++++++------------ .../util/process/ProcessResult.java | 29 ++++++++++--- .../web/common/tree/ConvertingErrorsDialog.java | 5 ++- openmeetings-web/src/main/webapp/css/tree.css | 3 ++ 7 files changed, 93 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java index 8a5c92b..904e86d 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java @@ -202,11 +202,11 @@ public abstract class BaseConverter { protected RecordingMetaData waitForTheStream(long metaId) throws InterruptedException { RecordingMetaData metaData = metaDataDao.get(metaId); if (metaData.getStreamStatus() != Status.STOPPED) { - log.debug("### meta Stream not yet written to disk " + metaId); + log.debug("### meta Stream not yet written to disk {}", metaId); long counter = 0; long maxTimestamp = 0; while(true) { - log.trace("### Stream not yet written Thread Sleep - " + metaId); + log.trace("### Stream not yet written Thread Sleep - {}", metaId); metaData = metaDataDao.get(metaId); @@ -259,14 +259,14 @@ public abstract class BaseConverter { List<RecordingMetaData> metaDataList) { try { // Init variables - log.debug("### meta Data Number - " + metaDataList.size()); + log.debug("### meta Data Number - {}", metaDataList.size()); log.debug("###################################################"); for (RecordingMetaData metaData : metaDataList) { long metaId = metaData.getId(); - log.debug("### processing metadata: " + metaId); + log.debug("### processing metadata: {}", metaId); if (metaData.getStreamStatus() == Status.NONE) { - log.debug("Stream has not been started, error in recording " + metaId); + log.debug("Stream has not been started, error in recording {}", metaId); continue; } @@ -284,8 +284,8 @@ public abstract class BaseConverter { , "-i", inputFlvFile.getCanonicalPath() , "-af", String.format("aresample=%s:min_comp=0.001:min_hard_comp=0.100000", getAudioBitrate()) , outputWav.getCanonicalPath()}; - - logs.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv)); + //there might be no audio in the stream + logs.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv, true)); } if (outputWav.exists() && outputWav.length() != 0) { @@ -319,7 +319,7 @@ public abstract class BaseConverter { } if (soxArgs != null) { - log.debug("START fillGap ################# Delta-ID :: " + metaDelta.getId()); + log.debug("START fillGap ################# Delta-ID :: {}", metaDelta.getId()); metaDeltaDao.update(metaDelta); counter++; @@ -353,7 +353,6 @@ public abstract class BaseConverter { // Finally add it to the row! waveFiles.add(outputFullWav); } - metaDataDao.update(metaData); } } catch (Exception err) { http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java index 1a52f90..d5b59a5 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemLogDao.java @@ -56,14 +56,15 @@ public class FileItemLogDao { .executeUpdate(); } - public FileItemLog add(String name, BaseFileItem f, ProcessResult returnMap) { - log.trace("Adding log: {}, {}, {}", name, f, returnMap); - FileItemLog l = new FileItemLog(); - l.setInserted(new Date()); - l.setExitCode(returnMap.getExitCode()); - l.setFileId(f.getId()); - l.setMessage(returnMap.buildLogMessage()); - l.setName(name); + public FileItemLog add(String name, BaseFileItem f, ProcessResult r) { + log.trace("Adding log: {}, {}, {}", name, f, r); + FileItemLog l = new FileItemLog() + .setInserted(new Date()) + .setExitCode(r.getExitCode()) + .setFileId(f.getId()) + .setMessage(r.buildLogMessage()) + .setName(name) + .setOptional(r.isOptional()); em.persist(l); return l; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java index c04a931..cf2b3e6 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItemLog.java @@ -39,7 +39,7 @@ import org.apache.openmeetings.db.entity.IDataProviderEntity; @Entity @NamedQueries({ @NamedQuery(name = "getFileLogsByFile", query = "SELECT fl FROM FileItemLog fl WHERE fl.fileId = :fileId"), - @NamedQuery(name = "countErrorFileLogsByFile", query = "SELECT COUNT(fl) FROM FileItemLog fl WHERE fl.fileId = :fileId AND fl.exitCode <> 0"), + @NamedQuery(name = "countErrorFileLogsByFile", query = "SELECT COUNT(fl) FROM FileItemLog fl WHERE fl.fileId = :fileId AND fl.optional = false AND fl.exitCode <> 0"), @NamedQuery(name = "deleteErrorFileLogsByFile", query = "DELETE FROM FileItemLog fl WHERE fl.fileId = :fileId") }) @Table(name = "file_log") public class FileItemLog implements IDataProviderEntity { @@ -66,6 +66,9 @@ public class FileItemLog implements IDataProviderEntity { @Column(name = "exit_code") private Integer exitCode; + @Column(name = "optional", nullable = false) + private boolean optional; + @Override public Long getId() { return id; @@ -80,40 +83,45 @@ public class FileItemLog implements IDataProviderEntity { return fileId; } - public void setFileId(Long fileId) { + public FileItemLog setFileId(Long fileId) { this.fileId = fileId; + return this; } public Date getInserted() { return inserted; } - public void setInserted(Date inserted) { + public FileItemLog setInserted(Date inserted) { this.inserted = inserted; + return this; } public String getName() { return name; } - public void setName(String name) { + public FileItemLog setName(String name) { this.name = name; + return this; } public String getMessage() { return bytes == null ? null : new String(bytes, UTF_8); } - public void setMessage(String message) { + public FileItemLog setMessage(String message) { setBytes(message.getBytes(UTF_8)); + return this; } public Integer getExitCode() { return exitCode; } - public void setExitCode(Integer exitCode) { + public FileItemLog setExitCode(Integer exitCode) { this.exitCode = exitCode; + return this; } public byte[] getBytes() { @@ -125,6 +133,19 @@ public class FileItemLog implements IDataProviderEntity { } public boolean isOk() { - return ZERO.equals(exitCode); + return optional || !isWarn(); + } + + public boolean isWarn() { + return !ZERO.equals(exitCode); + } + + public boolean isOptional() { + return optional; + } + + public FileItemLog setOptional(boolean optional) { + this.optional = optional; + return this; } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java ---------------------------------------------------------------------- diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java index 3996352..ea406c3 100644 --- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java +++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java @@ -35,20 +35,6 @@ public class ProcessHelper { private ProcessHelper() {} - public static ProcessResult executeScriptWindows(String process, String[] argv) { - try { - String[] cmd = new String[argv.length + 2]; - cmd[0] = "cmd.exe"; - cmd[1] = "/C"; - System.arraycopy(argv, 0, cmd, 2, argv.length); - Map<String, String> env = new HashMap<>(); - return executeScript(process, cmd, env); - } catch (Exception t) { - log.error("executeScriptWindows", t); - return new ProcessResult(process, t.getMessage(), t); - } - } - private static String getCommand(String[] argv) { StringBuilder tString = new StringBuilder(); for (int i = 0; i < argv.length; i++) { @@ -71,19 +57,24 @@ public class ProcessHelper { } public static ProcessResult executeScript(String process, String[] argv) { + return executeScript(process, argv, false); + } + + public static ProcessResult executeScript(String process, String[] argv, boolean optional) { Map<String, String> env = new HashMap<>(); - return executeScript(process, argv, env); + return executeScript(process, argv, env, optional); } - public static ProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env) { - ProcessResult res = new ProcessResult(); - res.setProcess(process); + private static ProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env, boolean optional) { + ProcessResult res = new ProcessResult() + .setProcess(process) + .setOptional(optional); debugCommandStart(process, argv); Process proc = null; try { - res.setCommand(getCommand(argv)); - res.setOut(""); + res.setCommand(getCommand(argv)) + .setOut(""); // By using the process Builder we have access to modify the // environment variables @@ -98,14 +89,14 @@ public class ProcessHelper { // its finished proc.waitFor(getExtProcessTtl(), TimeUnit.MINUTES); - res.setExitCode(proc.exitValue()); - res.setOut(IOUtils.toString(proc.getInputStream(), UTF_8)); - res.setError(IOUtils.toString(proc.getErrorStream(), UTF_8)); + res.setExitCode(proc.exitValue()) + .setOut(IOUtils.toString(proc.getInputStream(), UTF_8)) + .setError(IOUtils.toString(proc.getErrorStream(), UTF_8)); } catch (Throwable t) { log.error("executeScript", t); - res.setError(t.getMessage()); - res.setException(t.toString()); - res.setExitCode(-1); + res.setExitCode(-1) + .setError(t.getMessage()) + .setException(t.toString()); } finally { if (proc != null) { proc.destroy(); http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java ---------------------------------------------------------------------- diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java index 01c271f..8c45422 100644 --- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java +++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java @@ -36,6 +36,7 @@ public class ProcessResult { private String error; private Integer exitCode; private String out; + private boolean optional = false; public ProcessResult() { this(null, null, null); @@ -56,24 +57,27 @@ public class ProcessResult { return out; } - public void setOut(String out) { + public ProcessResult setOut(String out) { this.out = out; + return this; } public String getCommand() { return command; } - public void setCommand(String command) { + public ProcessResult setCommand(String command) { this.command = command; + return this; } public String getProcess() { return process; } - public void setProcess(String process) { + public ProcessResult setProcess(String process) { this.process = process; + return this; } public String getException() { @@ -88,8 +92,9 @@ public class ProcessResult { return error; } - public void setError(String error) { + public ProcessResult setError(String error) { this.error = error; + return this; } public Integer getExitCode() { @@ -101,8 +106,21 @@ public class ProcessResult { return this; } + public boolean isOptional() { + return optional; + } + + public ProcessResult setOptional(boolean optional) { + this.optional = optional; + return this; + } + public boolean isOk() { - return ZERO.equals(exitCode); + return optional || !isWarn(); + } + + public boolean isWarn() { + return !ZERO.equals(exitCode); } public String buildLogMessage() { @@ -112,6 +130,7 @@ public class ProcessResult { .append("exception: ").append(exception).append("\r\n") .append("error: ").append(error).append("\r\n") .append("exitValue: ").append(exitCode).append("\r\n") + .append("optional: ").append(optional).append("\r\n") .append("out: ").append(out).append("\r\n").toString(); } } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java index 45629f9..c44bc52 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/ConvertingErrorsDialog.java @@ -52,7 +52,10 @@ public class ConvertingErrorsDialog extends AbstractDialog<BaseFileItem> { item.add(new Label("exitCode", l.getExitCode())); item.add(new Label("message", l.getMessage())); if (!l.isOk()) { - item.add(AttributeModifier.replace(ATTR_CLASS, "alert")); + item.add(AttributeModifier.append(ATTR_CLASS, "alert")); + } + if (l.isWarn()) { + item.add(AttributeModifier.append(ATTR_CLASS, "warn")); } } }; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1093049c/openmeetings-web/src/main/webapp/css/tree.css ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/webapp/css/tree.css b/openmeetings-web/src/main/webapp/css/tree.css index 3277d48..37e9a5b 100644 --- a/openmeetings-web/src/main/webapp/css/tree.css +++ b/openmeetings-web/src/main/webapp/css/tree.css @@ -161,6 +161,9 @@ .dialog.errors .alert { color: red; } +.dialog.errors .warn { + color: #afaf09; +} .dialog.errors .message { display: block; unicode-bidi: embed;
