diff --git a/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties index abbd86e9d49a548cbf51e9afa87e19cacdbd47a4..c8a27c9a04b5762223c097e2abd7baa276c7c475 100644 --- a/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/admin/search/_i18n/LocalStrings_fr.properties @@ -1,7 +1,7 @@ #Tue Sep 09 10:42:03 CEST 2014 button.refreshindexing=Rafra\u00EEchir les "Lucene Readers" -button.startindexing=D\u00E9marrer d'indexer -button.stopindexing=Arr\u00EAter d'indexer +button.startindexing=D\u00E9marrer l'indexation +button.stopindexing=Arr\u00EAter l'indexation error.index.interval.must.be.number=L'intervalle d'index doit \u00EAtre un nombre fullindexer.doc.counters.title=Nombre de documents par type de document index\u00E9 fullindexer.doc.excluded.document.count=Nombre des fichiers non index\u00E9s (taille du fichier) diff --git a/src/main/java/org/olat/admin/sysinfo/SysinfoController.java b/src/main/java/org/olat/admin/sysinfo/SysinfoController.java index 62a02c823dd832ef3e449d6bb241f6b815cdeb6c..8b62d6c6a4504a9cbb54e53da92a14f8c570a8bb 100644 --- a/src/main/java/org/olat/admin/sysinfo/SysinfoController.java +++ b/src/main/java/org/olat/admin/sysinfo/SysinfoController.java @@ -151,7 +151,7 @@ public class SysinfoController extends FormBasicController { //version uifactory.addStaticTextElement("version", "sysinfo.version", Settings.getFullVersionInfo(), serverCont); - uifactory.addStaticTextElement("version.hg", "sysinfo.version.hg", WebappHelper.getChangeSet(), serverCont); + uifactory.addStaticTextElement("version.git", "sysinfo.version.git", WebappHelper.getChangeSet(), serverCont); String buildDate = format.formatDateAndTime(Settings.getBuildDate()); uifactory.addStaticTextElement("version.date", "sysinfo.version.date", buildDate, serverCont); diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties index c3bbd453bc9a6ce97764fd3f271a9aad77048b59..c1c65473f2a87c97c114e05e363a07f2bbc70cf1 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties @@ -180,7 +180,7 @@ sysinfo.olatdata=Daten Verzeichnis sysinfo.startuptime=Server Startzeit sysinfo.version=Version sysinfo.version.date=Build Datum -sysinfo.version.hg=Git Version +sysinfo.version.git=Git Version title.hibernate.statistics=Hibernate Datenbank Zugriff Statistik title.connection.statistics=Datenbank Connections Statistik usersession.title=Information \u00FCber Benutzer-Sessions diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties index 710c3e0d3cbc7aa65f5f603e2f6c4dd5b33ea1f1..fe8b92b186ef70ca4d029a6b9fa7b00024926bc8 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_en.properties @@ -180,7 +180,7 @@ sysinfo.olatdata=Data directory sysinfo.startuptime=Server startup time sysinfo.version=Version sysinfo.version.date=Build date -sysinfo.version.hg=Git version +sysinfo.version.git=Git version title.connection.statistics=Database connections statistics title.hibernate.statistics=Hibernate database access statistics usersession.title=Information on user sessions diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties index 43a359b7a088f85224d82501384682254b67dadc..b7a8d12b25c965b9a1338cc77ef0aebcd4fe3b67 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_fr.properties @@ -180,7 +180,7 @@ sysinfo.olatdata=Dossier donn\u00E9es sysinfo.startuptime=temps de d\u00E9part du serveur sysinfo.version=Version sysinfo.version.date=Date de compilation -sysinfo.version.hg=Version mercurial +sysinfo.version.git=Version Git title.connection.statistics=Statistiques des connections \u00E0 la base de donn\u00E9es title.hibernate.statistics=Base de donn\u00E9e hibern\u00E9e acc\u00E8s statistiques usersession.title=Informations sur la session utilisateur diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties index 4c0da53c11ec4e0afa0f34dd74962fc6bf1e71c1..113e505cb6ec15c22964ec415cd797ecf45d82b8 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_it.properties @@ -180,7 +180,7 @@ sysinfo.olatdata=Directory dati sysinfo.startuptime=Momento d'avvio del server sysinfo.version=Versione sysinfo.version.date=Data build -sysinfo.version.hg=Versione mercurial +sysinfo.version.git=Versione Git title.connection.statistics=Statistiche connessione database title.hibernate.statistics=Hibernate statistica accesso banca dati usersession.title=Informazione sulle sessioni degli utenti diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties index 194b08c72be76b1f8da74b83f33bccc10db0f8a0..37273ea0da4ac3918a3cf42b72ba47974d35c30a 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pl.properties @@ -136,6 +136,6 @@ sysinfo.memory=Informacje o pami\u0119ci sysinfo.startuptime=Czas uruchamiania serwera sysinfo.version=Wersja sysinfo.version.date=Data kompilacji -sysinfo.version.hg=Wersja Mercurial +sysinfo.version.git=Wersja Git title.hibernate.statistics=Hibernate database access statistics usersession.title=Informacje o sesjach u\u017Cytkownika diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties index d6691d172f49221d3abeca33d6ba5dcb6b1ac1d9..912ed1621f7ebdb774ac4e6d8dfb8f207a581a33 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_pt_BR.properties @@ -180,7 +180,7 @@ sysinfo.olatdata=Diret\u00F3rio de dados sysinfo.startuptime=Server startup time sysinfo.version=Vers\u00E3o sysinfo.version.date=Build date -sysinfo.version.hg=Git version +sysinfo.version.git=Git version title.connection.statistics=Estat\u00EDsticas de conex\u00F5es ao banco de dados title.hibernate.statistics=Acesso banco de estatisticas Hibernate usersession.title=Informa\u00E7\u00E3o sobre sess\u00F5es do usu\u00E1rio diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties index 71580df57c6d5292512d25bb32c3b0086ad4a549..0d41bf8537e0884515fced0946373c4f2eac20cb 100644 --- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties +++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_zh_CN.properties @@ -153,6 +153,6 @@ sysinfo.olatdata=\u6570\u636E\u76EE\u5F55 sysinfo.startuptime=\u670D\u52A1\u5668\u5F00\u542F\u65F6\u95F4 sysinfo.version=\u7248\u672C sysinfo.version.date=\u521B\u5EFA\u65E5\u671F -sysinfo.version.hg=Mercurial\u7248\u672C +sysinfo.version.git=Git\u7248\u672C title.hibernate.statistics=Hibernate\u6570\u636E\u5E93\u8BBF\u95EE\u7EDF\u8BA1 usersession.title=\u7528\u6237\u4F1A\u8BDD\u4FE1\u606F diff --git a/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java b/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java index 31e38aa0d119749ca0e0b73931a7ade558fd85b4..fd7cd47ec9566e46ef3f8cc7099e4a523d7fc831 100644 --- a/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java +++ b/src/main/java/org/olat/modules/coach/ui/StudentCoursesController.java @@ -377,7 +377,8 @@ public class StudentCoursesController extends FormBasicController implements Act removeAsListenerAndDispose(cmc); ContactMessage cmsg = new ContactMessage(getIdentity()); - ContactList contactList = new ContactList("to"); + String fullName = userManager.getUserDisplayName(student); + ContactList contactList = new ContactList(fullName); contactList.add(student); cmsg.addEmailTo(contactList); contactCtrl = new ContactFormController(ureq, getWindowControl(), true, false, false, cmsg); diff --git a/src/main/java/org/olat/restapi/system/IndexerWebService.java b/src/main/java/org/olat/restapi/system/IndexerWebService.java index ad614a5cf1ddd415904efa8c5b485750f2c0c7de..d2be7f89c5fd1423c33bdda41af6c954c6ac45f6 100644 --- a/src/main/java/org/olat/restapi/system/IndexerWebService.java +++ b/src/main/java/org/olat/restapi/system/IndexerWebService.java @@ -43,9 +43,9 @@ public class IndexerWebService { /** * Return the statistics about the indexer * @response.representation.200.qname {http://www.example.com}releaseVO - * @response.representation.200.mediaType application/xml, application/json - * @response.representation.200.doc Statistics about the indexer - * @response.representation.200.example {@link org.olat.restapi.system.vo.Examples#SAMPLE_OO_INDEXERSTATSVO} + * @response.representation.200.mediaType application/xml, application/json + * @response.representation.200.doc Statistics about the indexer + * @response.representation.200.example {@link org.olat.restapi.system.vo.Examples#SAMPLE_OO_INDEXERSTATSVO} * @response.representation.401.doc The roles of the authenticated user are not sufficient * @return The statistics about the indexer */ @@ -58,8 +58,8 @@ public class IndexerWebService { /** * Return the status of the indexer: running, stopped - * @response.representation.200.mediaType application/xml, application/json - * @response.representation.200.doc The status of the indexer + * @response.representation.200.mediaType application/xml, application/json + * @response.representation.200.doc The status of the indexer * @response.representation.401.doc The roles of the authenticated user are not sufficient * @return The status of the indexer */ @@ -72,15 +72,15 @@ public class IndexerWebService { if(serviceStatus instanceof SearchServiceStatusImpl) { status = serviceStatus.getStatus(); } else { - status = "disabled"; + status = FullIndexerStatus.STATUS_DISABLED; } return Response.ok(new IndexerStatus(status)).build(); } /** * Return the status of the indexer: running, stopped - * @response.representation.200.mediaType text/plain - * @response.representation.200.doc The status of the indexer + * @response.representation.200.mediaType text/plain + * @response.representation.200.doc The status of the indexer * @response.representation.401.doc The roles of the authenticated user are not sufficient * @return The status of the indexer */ @@ -93,7 +93,7 @@ public class IndexerWebService { if(serviceStatus instanceof SearchServiceStatusImpl) { status = serviceStatus.getStatus(); } else { - status = "disabled"; + status = FullIndexerStatus.STATUS_DISABLED; } return Response.ok(status).build(); } @@ -101,7 +101,7 @@ public class IndexerWebService { /** * Update the status of the indexer: running, stopped. * Running start the indexer, stopped, stop it. - * @response.representation.200.doc The status has changed + * @response.representation.200.doc The status has changed * @response.representation.401.doc The roles of the authenticated user are not sufficient * @return The status of the indexer */ @@ -123,18 +123,20 @@ public class IndexerWebService { if(status instanceof SearchServiceStatusImpl) { SearchServiceStatusImpl statusImpl = (SearchServiceStatusImpl)status; FullIndexerStatus fStatus = statusImpl.getFullIndexerStatus(); - stats.setIndexedDocumentCount(fStatus.getDocumentCount()); - stats.setExcludedDocumentCount(fStatus.getExcludedDocumentCount()); - stats.setIndexSize(fStatus.getIndexSize()); - stats.setIndexingTime(fStatus.getIndexingTime()); + FullIndexerStatus lStatus = statusImpl.getLifeIndexerStatus(); + + stats.setIndexedDocumentCount(fStatus.getDocumentCount() + lStatus.getDocumentCount()); + stats.setExcludedDocumentCount(fStatus.getExcludedDocumentCount() + lStatus.getExcludedDocumentCount()); + stats.setIndexSize(fStatus.getIndexSize() + lStatus.getIndexSize()); + stats.setIndexingTime(fStatus.getIndexingTime() + lStatus.getIndexingTime()); stats.setFullIndexStartedAt(fStatus.getFullIndexStartedAt()); - stats.setDocumentQueueSize(fStatus.getDocumentQueueSize()); - stats.setRunningFolderIndexerCount(fStatus.getNumberRunningFolderIndexer()); - stats.setAvailableFolderIndexerCount(fStatus.getNumberAvailableFolderIndexer()); + stats.setDocumentQueueSize(fStatus.getDocumentQueueSize() + lStatus.getDocumentQueueSize()); + stats.setRunningFolderIndexerCount(fStatus.getNumberRunningFolderIndexer() + lStatus.getNumberRunningFolderIndexer()); + stats.setAvailableFolderIndexerCount(fStatus.getNumberAvailableFolderIndexer() + lStatus.getNumberAvailableFolderIndexer()); stats.setLastFullIndexTime(fStatus.getLastFullIndexDateString()); stats.setStatus(status.getStatus()); } else { - stats.setStatus("disabled"); + stats.setStatus(FullIndexerStatus.STATUS_DISABLED); } return stats; } diff --git a/src/main/java/org/olat/restapi/system/ProcSamplerJob.java b/src/main/java/org/olat/restapi/system/ProcSamplerJob.java index 74dec32a364ad5adb40336dd97e86cede971b3bd..e86598b970947806bff6c1e2c4013d5aac01ca47 100644 --- a/src/main/java/org/olat/restapi/system/ProcSamplerJob.java +++ b/src/main/java/org/olat/restapi/system/ProcSamplerJob.java @@ -21,7 +21,6 @@ package org.olat.restapi.system; import java.io.File; import java.io.FileOutputStream; -import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; @@ -43,8 +42,6 @@ import org.olat.restapi.system.MonitoringService.Statistics; import org.olat.restapi.system.vo.SessionsVO; import org.olat.search.SearchServiceStatus; import org.olat.search.service.SearchServiceFactory; -import org.olat.search.service.SearchServiceStatusImpl; -import org.olat.search.service.indexer.FullIndexerStatus; import org.quartz.JobExecutionContext; import org.springframework.scheduling.quartz.QuartzJobBean; import org.w3c.dom.Document; @@ -118,30 +115,32 @@ public class ProcSamplerJob extends QuartzJobBean { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); format.setTimeZone(TimeZones.getUtcTimeZone()); SearchServiceStatus status = SearchServiceFactory.getService().getStatus(); - if(status instanceof SearchServiceStatusImpl) { - SearchServiceStatusImpl statusImpl = (SearchServiceStatusImpl)status; - FullIndexerStatus fStatus = statusImpl.getFullIndexerStatus(); - String date = format.format(new Date(fStatus.getLastFullIndexTime())); - addValue("lastFullIndexTime", date, rootEl, doc); - } + + String date = format.format(status.getLastFullIndexTime()); + addValue("lastFullIndexTime", date, rootEl, doc); + //marker addValue("lastOpenOLATSampling", format.format(new Date()), rootEl, doc); - // Use a Transformer for output - try(OutputStream out = new FileOutputStream(xmlFile)) { - TransformerFactory tFactory = TransformerFactory.newInstance(); - Transformer transformer = tFactory.newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.transform(new DOMSource(doc), new StreamResult(out)); - } catch(IOException e) { - log.error("", e); - } + writeDocument(xmlFile, doc); } catch(Exception e) { log.error("", e); } } + private void writeDocument(File xmlFile, Document doc) { + // Use a Transformer for output + try(OutputStream out = new FileOutputStream(xmlFile)) { + TransformerFactory tFactory = TransformerFactory.newInstance(); + Transformer transformer = tFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.transform(new DOMSource(doc), new StreamResult(out)); + } catch(Exception e) { + log.error("", e); + } + } + private Document loadDocument(File xmlFile) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); diff --git a/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java b/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java index 7cec28cda1f21f52f89e1e4db07398f40f39347b..097005b78ea2ce88d299eb5ad377c5165651d545 100644 --- a/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java +++ b/src/main/java/org/olat/restapi/system/vo/IndexerStatus.java @@ -24,8 +24,6 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; -import org.olat.search.SearchServiceStatus; - /** * * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com @@ -33,7 +31,7 @@ import org.olat.search.SearchServiceStatus; */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "indexerStatusVO") -public class IndexerStatus implements SearchServiceStatus { +public class IndexerStatus { @XmlAttribute(name="status") private String status; diff --git a/src/main/java/org/olat/search/SearchServiceStatus.java b/src/main/java/org/olat/search/SearchServiceStatus.java index 31d70be976682667341b9e07a0de1d1b51099f60..424d9040ae3f15a3e1f26c92f604a1788f46951a 100644 --- a/src/main/java/org/olat/search/SearchServiceStatus.java +++ b/src/main/java/org/olat/search/SearchServiceStatus.java @@ -25,6 +25,7 @@ package org.olat.search; +import java.util.Date; /** * Collection of search-service states. Includes state of full-index, index and search. @@ -34,5 +35,7 @@ package org.olat.search; public interface SearchServiceStatus { public String getStatus(); + + public Date getLastFullIndexTime(); } diff --git a/src/main/java/org/olat/search/_spring/searchContext.xml b/src/main/java/org/olat/search/_spring/searchContext.xml index 775eaf9d2c05f5080958a3d9a66f7742f69ab22e..b27414e82ee54dc402051a2785b05d76c74db3d9 100644 --- a/src/main/java/org/olat/search/_spring/searchContext.xml +++ b/src/main/java/org/olat/search/_spring/searchContext.xml @@ -304,10 +304,6 @@ </property> </bean> - - <!-- Question items --> - <bean id="questionItemIndexer" class="org.olat.search.service.indexer.QuestionItemIndexer"/> - <!-- Inject security callback to IdentityIndexer which reduce the visibility of users via the full text search to admin and user managers --> <!-- diff --git a/src/main/java/org/olat/search/service/SearchServiceImpl.java b/src/main/java/org/olat/search/service/SearchServiceImpl.java index a6e3e07392eebe98a940c2ad1d079247b35ed31f..6e53f07c417ffeca3e779e9db5dfebdefe791a82 100644 --- a/src/main/java/org/olat/search/service/SearchServiceImpl.java +++ b/src/main/java/org/olat/search/service/SearchServiceImpl.java @@ -458,7 +458,7 @@ public class SearchServiceImpl implements SearchService, GenericEventListener { @Override public SearchServiceStatus getStatus() { - return new SearchServiceStatusImpl(indexer,this); + return new SearchServiceStatusImpl(indexer, lifeIndexer, this); } @Override diff --git a/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java b/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java index 8804da7e69fe7b8107928eec926c86b4c50268c5..34f7f4dc2075e32da702359fc3bde9d139323ef7 100644 --- a/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java +++ b/src/main/java/org/olat/search/service/SearchServiceStatusImpl.java @@ -25,10 +25,13 @@ package org.olat.search.service; +import java.util.Date; + import org.olat.search.SearchService; import org.olat.search.SearchServiceStatus; import org.olat.search.service.indexer.FullIndexerStatus; import org.olat.search.service.indexer.Index; +import org.olat.search.service.indexer.LifeFullIndexer; /** * Collection of search-service states. Includes state of full-index, index and search. @@ -37,7 +40,8 @@ import org.olat.search.service.indexer.Index; */ public class SearchServiceStatusImpl implements SearchServiceStatus { - FullIndexerStatus fullIndexerStatus; + private final FullIndexerStatus fullIndexerStatus; + private final FullIndexerStatus lifeIndexerStatus; private boolean indexExists; private long queryCount; @@ -50,15 +54,25 @@ public class SearchServiceStatusImpl implements SearchServiceStatus { * @param indexer Reference to index-component. * @param search Reference to search-component. */ - public SearchServiceStatusImpl(Index indexer, SearchService search) { + public SearchServiceStatusImpl(Index indexer, LifeFullIndexer lifeIndexer, SearchService search) { fullIndexerStatus = indexer.getFullIndexStatus(); + lifeIndexerStatus = lifeIndexer.getStatus(); indexExists = indexer.existIndex(); queryCount = search.getQueryCount(); } @Override public String getStatus() { - return fullIndexerStatus.getStatus(); + String fullStatus = fullIndexerStatus.getStatus(); + String lifeStatus = lifeIndexerStatus.getStatus(); + + String status = FullIndexerStatus.STATUS_STOPPED; + if(FullIndexerStatus.STATUS_RUNNING.equals(fullStatus) || FullIndexerStatus.STATUS_RUNNING.equals(lifeStatus)) { + status = FullIndexerStatus.STATUS_RUNNING; + } else if(FullIndexerStatus.STATUS_FINISHED.equals(fullStatus) || FullIndexerStatus.STATUS_FINISHED.equals(lifeStatus)) { + status = FullIndexerStatus.STATUS_FINISHED; + } + return status; } /** @@ -68,6 +82,20 @@ public class SearchServiceStatusImpl implements SearchServiceStatus { return fullIndexerStatus; } + /** + * @return Status of life-indexer. + */ + public FullIndexerStatus getLifeIndexerStatus() { + return lifeIndexerStatus; + } + + @Override + public Date getLastFullIndexTime() { + long fullTime = fullIndexerStatus.getLastFullIndexTime(); + long lifeTime = lifeIndexerStatus.getLastFullIndexTime(); + return (lifeTime > fullTime) ? new Date(lifeTime) : new Date(fullTime); + } + /** * @return TRUE when an search index exists. */ diff --git a/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java b/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java index 204ab0b856a0b38769a9d74e783fc6f86fdab79f..36df4a3ff27ace94df07dc5377605c040685ac5e 100644 --- a/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java +++ b/src/main/java/org/olat/search/service/indexer/FullIndexerStatus.java @@ -38,10 +38,10 @@ import org.olat.search.service.document.file.FileDocumentFactory; */ public class FullIndexerStatus { - public final static String STATUS_STOPPED = "stopped"; - public final static String STATUS_RUNNING = "running"; - public final static String STATUS_FINISHED = "finished"; - public final static String STATUS_SLEEPING = "sleeping"; + public static final String STATUS_STOPPED = "stopped"; + public static final String STATUS_RUNNING = "running"; + public static final String STATUS_FINISHED = "finished"; + public static final String STATUS_DISABLED = "disabled"; private long fullIndexStartedAt = 0; private long lastFullIndexTime = 0; @@ -63,8 +63,8 @@ public class FullIndexerStatus { public FullIndexerStatus(int numberOfPartDocumentCounters) { partDocumentCounters = new int[numberOfPartDocumentCounters]; - documentCounters = new Hashtable<String,Integer>(); - fileTypeCounters = new Hashtable<String,Integer>(); + documentCounters = new Hashtable<>(); + fileTypeCounters = new Hashtable<>(); } @@ -140,8 +140,8 @@ public class FullIndexerStatus { for (int i = 0; i < partDocumentCounters.length; i++) { partDocumentCounters[i] = 0; } - documentCounters = new Hashtable<String,Integer>(); - fileTypeCounters = new Hashtable<String,Integer>(); + documentCounters = new Hashtable<>(); + fileTypeCounters = new Hashtable<>(); CoreSpringFactory.getImpl(FileDocumentFactory.class).resetExcludedFileSizeCount(); } @@ -262,10 +262,10 @@ public class FullIndexerStatus { * @return Return HTML formatted text with document-type names and counter-values. */ public String getDocumentCounters() { - StringBuilder buf = new StringBuilder(); - for (String documentType : documentCounters.keySet()) { - Integer counterValue = documentCounters.get(documentType); - buf.append(documentType); + StringBuilder buf = new StringBuilder(1024); + for (Map.Entry<String, Integer> documentType : documentCounters.entrySet()) { + Integer counterValue = documentType.getValue(); + buf.append(documentType.getKey()); buf.append("="); buf.append(counterValue.toString()); buf.append("<br />"); @@ -285,10 +285,10 @@ public class FullIndexerStatus { * @return Return HTML formatted text with file-type names and counter-values. */ public String getFileTypeCounters() { - StringBuilder buf = new StringBuilder(); - for (String fileType : fileTypeCounters.keySet()) { - Integer counterValue = fileTypeCounters.get(fileType); - buf.append(fileType); + StringBuilder buf = new StringBuilder(1024); + for (Map.Entry<String, Integer> fileType : fileTypeCounters.entrySet()) { + Integer counterValue = fileType.getValue(); + buf.append(fileType.getKey()); buf.append("="); buf.append(counterValue.toString()); buf.append("<br />"); diff --git a/src/main/java/org/olat/search/service/indexer/JmsIndexer.java b/src/main/java/org/olat/search/service/indexer/JmsIndexer.java index 82b7a6a02b64ec2b6880794b16537848c75ac59d..4207c8d7450a524cc0f8fb627ee546b7f607a75a 100644 --- a/src/main/java/org/olat/search/service/indexer/JmsIndexer.java +++ b/src/main/java/org/olat/search/service/indexer/JmsIndexer.java @@ -85,13 +85,16 @@ public class JmsIndexer implements MessageListener, LifeFullIndexer, ConfigOnOff private double ramBufferSizeMB; private boolean indexingNode; - + + private FullIndexerStatus fullIndexerStatus; + private List<LifeIndexer> indexers = new ArrayList<>(); public JmsIndexer(SearchModule searchModuleConfig, CoordinatorManager coordinatorManager) { indexingNode = searchModuleConfig.isSearchServiceEnabled(); ramBufferSizeMB = searchModuleConfig.getRAMBufferSizeMB(); permanentIndexPath = searchModuleConfig.getFullPermanentIndexPath(); + fullIndexerStatus = new FullIndexerStatus(0); this.coordinatorManager = coordinatorManager; } @@ -243,9 +246,18 @@ public class JmsIndexer implements MessageListener, LifeFullIndexer, ConfigOnOff @Override public void fullIndex() { + log.info("start full reindex of life index"); + fullIndexerStatus.indexingStarted(); for(LifeIndexer indexer:indexers) { indexer.fullIndex(this); } + fullIndexerStatus.indexingFinished(); + log.info("end full reindex of life index"); + } + + @Override + public FullIndexerStatus getStatus() { + return fullIndexerStatus; } @Override diff --git a/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java b/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java index 120c29a7475378ba5e3dee49b00e85cf19d98ee5..7123f6f0b54d7fa213666cb640f2c36543c44caf 100644 --- a/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java +++ b/src/main/java/org/olat/search/service/indexer/LifeFullIndexer.java @@ -40,6 +40,8 @@ public interface LifeFullIndexer { */ public void fullIndex(); + public FullIndexerStatus getStatus(); + /** * Ask to index the document with the specified key * @param type diff --git a/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java b/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java index 539ea6db9bf1e5913347966202452016953cba5c..cc87bc9cc1387221f3b166c9e5768152fcb63a28 100644 --- a/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java +++ b/src/main/java/org/olat/search/service/indexer/QuestionItemIndexer.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexWriter; import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.DB; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.modules.qpool.QPoolService; @@ -32,6 +33,8 @@ import org.olat.modules.qpool.QuestionItemFull; import org.olat.modules.qpool.manager.QuestionItemDocumentFactory; import org.olat.modules.qpool.model.QItemDocument; import org.olat.search.service.SearchResourceContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; /** * @@ -39,9 +42,13 @@ import org.olat.search.service.SearchResourceContext; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ +@Service("questionItemIndexer") public class QuestionItemIndexer implements LifeIndexer { private static final OLog log = Tracing.createLoggerFor(QuestionItemIndexer.class); private static final int BATCH_SIZE = 100; + + @Autowired + private DB dbInstance; @Override public String getSupportedTypeName() { @@ -87,12 +94,15 @@ public class QuestionItemIndexer implements LifeIndexer { indexWriter.addDocument(doc, writer); } counter += items.size(); + indexWriter.getStatus().addDocumentCount(items.size()); + dbInstance.commitAndCloseSession(); } while(items.size() == BATCH_SIZE); log.info(counter + " question items indexed."); } catch (Exception e) { log.error("", e); } finally { indexWriter.releaseWriter(writer); + dbInstance.commitAndCloseSession(); } } }