You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2012/07/18 18:14:48 UTC
svn commit: r1362997 - in /incubator/openmeetings/trunk/singlewebapp: docs/
src/org/openmeetings/app/data/flvrecord/
src/org/openmeetings/app/persistence/beans/flvrecord/
src/org/openmeetings/cli/ xdocs/
Author: solomax
Date: Wed Jul 18 16:14:48 2012
New Revision: 1362997
URL: http://svn.apache.org/viewvc?rev=1362997&view=rev
Log:
OPENMEETINGS-111 file options of command-line admin are improved, cleanup switch is added
Modified:
incubator/openmeetings/trunk/singlewebapp/docs/CommandLineAdmin.html
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/FlvRecordingDaoImpl.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecording.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
incubator/openmeetings/trunk/singlewebapp/xdocs/CommandLineAdmin.xml
Modified: incubator/openmeetings/trunk/singlewebapp/docs/CommandLineAdmin.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/docs/CommandLineAdmin.html?rev=1362997&r1=1362996&r2=1362997&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/docs/CommandLineAdmin.html (original)
+++ incubator/openmeetings/trunk/singlewebapp/docs/CommandLineAdmin.html Wed Jul 18 16:14:48 2012
@@ -651,6 +651,7 @@ limitations under the License.
<span style="margin-left: 100px;">--db-pass <arg> (optional) Password of the user with write access to the DB specified</span><br />
--------------------------------------------------------------------------------------------------<br />
-f,--files File operations - statictics/cleanup<br />
+<span style="margin-left: 100px;">--cleanup (optional) Should intermediate files be clean up</span><br />
--------------------------------------------------------------------------------------------------<br />
</div>
</div>
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/FlvRecordingDaoImpl.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/FlvRecordingDaoImpl.java?rev=1362997&r1=1362996&r2=1362997&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/FlvRecordingDaoImpl.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/flvrecord/FlvRecordingDaoImpl.java Wed Jul 18 16:14:48 2012
@@ -64,6 +64,22 @@ public class FlvRecordingDaoImpl {
return null;
}
+ public FlvRecording getRecordingByHash(String hash) {
+ try {
+ TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingByHash", FlvRecording.class);
+ query.setParameter("fileHash", hash);
+
+ try {
+ return query.getSingleResult();
+ } catch (NoResultException ex) {
+ //noop
+ }
+ } catch (Exception ex2) {
+ log.error("[getRecordingByHash]: ",ex2);
+ }
+ return null;
+ }
+
public List<FlvRecording> getFlvRecordings() {
try {
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecording.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecording.java?rev=1362997&r1=1362996&r2=1362997&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecording.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/flvrecord/FlvRecording.java Wed Jul 18 16:14:48 2012
@@ -31,10 +31,15 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
+@NamedQueries({
+ @NamedQuery(name = "getRecordingByHash", query = "SELECT f FROM FlvRecording f WHERE f.fileHash = :fileHash")
+})
@Table(name = "flvrecording")
public class FlvRecording implements Serializable {
Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java?rev=1362997&r1=1362996&r2=1362997&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/cli/Admin.java Wed Jul 18 16:14:48 2012
@@ -47,11 +47,13 @@ import org.apache.commons.cli.PosixParse
import org.apache.commons.transaction.util.FileHelper;
import org.apache.openjpa.jdbc.meta.MappingTool;
import org.openmeetings.app.data.file.dao.FileExplorerItemDaoImpl;
+import org.openmeetings.app.data.flvrecord.FlvRecordingDaoImpl;
import org.openmeetings.app.data.user.dao.UsersDaoImpl;
import org.openmeetings.app.documents.InstallationDocumentHandler;
import org.openmeetings.app.installation.ImportInitvalues;
import org.openmeetings.app.installation.InstallationConfig;
import org.openmeetings.app.persistence.beans.files.FileExplorerItem;
+import org.openmeetings.app.persistence.beans.flvrecord.FlvRecording;
import org.openmeetings.app.persistence.beans.user.Users;
import org.openmeetings.servlet.outputhandler.BackupExport;
import org.openmeetings.servlet.outputhandler.BackupImportController;
@@ -120,6 +122,8 @@ public class Admin {
options.addOption(new OmOption("i", null, "force", false, "Install without checking the existence of old data in the database.", true));
//languages
options.addOption(new OmOption("l", "lang", "language", true, "Single language to be imported (id or name)", true));
+ //files
+ options.addOption(new OmOption("f", null, "cleanup", false, "Should intermediate files be clean up", true));
return options;
}
@@ -404,11 +408,12 @@ public class Admin {
}
break;
case languages:
- System.out.println("All language file will be reimported");
+ System.out.println("All language files will be reimported");
try {
ImportInitvalues importInit = getApplicationContext(ctxName).getBean(ImportInitvalues.class);
if (cmdl.hasOption("lang")) {
String lang = cmdl.getOptionValue("lang");
+ System.out.println("Only '" + lang + "' language will be reimported");
try {
int id = Integer.parseInt(lang);
importInit.loadLanguagesFile(id);
@@ -416,6 +421,7 @@ public class Admin {
importInit.loadLanguagesFile(lang);
}
} else {
+ System.out.println("All language files will be reimported");
importInit.loadLanguagesFiles();
}
} catch (Exception e) {
@@ -424,6 +430,10 @@ public class Admin {
break;
case files:
try {
+ boolean cleanup = cmdl.hasOption("cleanup");
+ if (cleanup) {
+ System.out.println("WARNING: all intermadiate files will be clean up!");
+ }
StringBuilder report = new StringBuilder();
report.append("Temporary files allocates: ").append(OmFileHelper.getHumanSize(OmFileHelper.getUploadTempDir())).append("\n");
{ //UPLOAD
@@ -440,9 +450,17 @@ public class Admin {
long userId = getUserIdByProfile(profile.getName());
Users u = udao.getUser(userId);
if (profile.isFile() || userId < 0 || u == null) {
- invalid += pSize;
+ if (cleanup) {
+ FileHelper.removeRec(profile);
+ } else {
+ invalid += pSize;
+ }
} else if ("true".equals(u.getDeleted())) {
- deleted += pSize;
+ if (cleanup) {
+ FileHelper.removeRec(profile);
+ } else {
+ deleted += pSize;
+ }
}
}
long missing = 0;
@@ -474,9 +492,17 @@ public class Admin {
long fSize = OmFileHelper.getSize(f);
FileExplorerItem item = fileDao.getFileExplorerItemsByHash(f.getName());
if (item == null) {
- invalid += fSize;
+ if (cleanup) {
+ FileHelper.removeRec(f);
+ } else {
+ invalid += fSize;
+ }
} else if ("true".equals(item.getDeleted())) {
- deleted += fSize;
+ if (cleanup) {
+ FileHelper.removeRec(f);
+ } else {
+ deleted += fSize;
+ }
}
}
missing = 0;
@@ -492,18 +518,62 @@ public class Admin {
report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
}
{ //STREAMS
- long sectionSize = OmFileHelper.getSize(OmFileHelper.getStreamsDir());
+ File streamsDir = OmFileHelper.getStreamsDir();
+ File hibernateDir = OmFileHelper.getStreamsHibernateDir();
+ if (cleanup) {
+ String hiberPath = hibernateDir.getCanonicalPath();
+ for (File f : streamsDir.listFiles()) {
+ if (!f.getCanonicalPath().equals(hiberPath)) {
+ FileHelper.removeRec(f);
+ }
+ }
+ }
+ long sectionSize = OmFileHelper.getSize(streamsDir);
report.append("Recordings allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
- long size = OmFileHelper.getSize(OmFileHelper.getStreamsHibernateDir());
+ long size = OmFileHelper.getSize(hibernateDir);
long restSize = sectionSize - size;
+ FlvRecordingDaoImpl recordDao = ctx.getBean(FlvRecordingDaoImpl.class);
+ long[] params = {0, 0}; // [0] == deleted [1] == missing
+ for (FlvRecording rec : recordDao.getAllFlvRecordings()) {
+ checkRecordingFile(hibernateDir, rec.getFileHash(), rec.getDeleted(), params, cleanup);
+ checkRecordingFile(hibernateDir, rec.getAlternateDownload(), rec.getDeleted(), params, cleanup);
+ checkRecordingFile(hibernateDir, rec.getPreviewImage(), rec.getDeleted(), params, cleanup);
+ }
+ long invalid = 0;
+ for (File f : hibernateDir.listFiles()) {
+ if (f.isFile() && f.getName().endsWith(".flv")) {
+ FlvRecording rec = recordDao.getRecordingByHash(f.getName());
+ if (rec == null) {
+ if (cleanup) {
+ FileHelper.removeRec(f);
+ } else {
+ invalid += f.length();
+ }
+ String name = f.getName().substring(0, f.getName().length() - 5);
+ File rfa = new File(hibernateDir, name + ".avi");
+ if (rfa.exists()) {
+ if (cleanup) {
+ FileHelper.removeRec(rfa);
+ } else {
+ invalid += rfa.length();
+ }
+ }
+ File rfj = new File(hibernateDir, name + ".jpg");
+ if (rfj.exists()) {
+ if (cleanup) {
+ FileHelper.removeRec(rfj);
+ } else {
+ invalid += rfj.length();
+ }
+ }
+ }
+ }
+ }
report.append("\t\tfinal: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+ report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+ report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(params[0])).append("\n");
+ report.append("\t\t\tmissing count: ").append(params[1]).append("\n");
report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
-
- //public/private recordings
- //Object: flvrecording_metadata == possibly incomplete
- //Object: flvrecording == final
- //webapps/openmeetings/streams/<room_id>/rec_<id>* -->temporary files
- //webapps/openmeetings/streams/hibernate/flvRecording_<id>* -->files
}
System.out.println(report);
} catch (Exception e) {
@@ -520,6 +590,22 @@ public class Admin {
System.exit(0);
}
+ private void checkRecordingFile(File hibernateDir, String name, String deleted, long[] params, boolean cleanup) {
+ File flv = name != null ? new File(hibernateDir, name) : null;
+ if (flv != null) {
+ if (flv.exists() && flv.isFile()) {
+ if ("true".equals(deleted)) {
+ params[0] += flv.length();
+ if (cleanup) {
+ FileHelper.removeRec(flv);
+ }
+ }
+ } else {
+ params[1]++;
+ }
+ }
+ }
+
private long getUserIdByProfile(String name) {
long result = -1;
if (name.startsWith(OmFileHelper.profilesPrefix)) {
Modified: incubator/openmeetings/trunk/singlewebapp/xdocs/CommandLineAdmin.xml
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/xdocs/CommandLineAdmin.xml?rev=1362997&r1=1362996&r2=1362997&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/xdocs/CommandLineAdmin.xml (original)
+++ incubator/openmeetings/trunk/singlewebapp/xdocs/CommandLineAdmin.xml Wed Jul 18 16:14:48 2012
@@ -57,6 +57,7 @@
<span style="margin-left: 100px;">--db-pass <arg> (optional) Password of the user with write access to the DB specified</span><br/>
--------------------------------------------------------------------------------------------------<br/>
-f,--files File operations - statictics/cleanup<br/>
+<span style="margin-left: 100px;">--cleanup (optional) Should intermediate files be clean up</span><br/>
--------------------------------------------------------------------------------------------------<br/>
</div>
</div>