/* * Copyright 2013 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */packagecom.gitblit.manager;importjava.io.File;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Map;importjava.util.TimeZone;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.gitblit.Constants;importcom.gitblit.IStoredSettings;importcom.gitblit.Keys;importcom.gitblit.models.ServerSettings;importcom.gitblit.models.ServerStatus;importcom.gitblit.models.SettingModel;importcom.gitblit.utils.StringUtils;publicclassRuntimeManagerimplementsIRuntimeManager{privatefinalLoggerlogger=LoggerFactory.getLogger(getClass());privatefinalIStoredSettingssettings;privatefinalServerStatusserverStatus;privatefinalServerSettingssettingsModel;privateFilebaseFolder;privateTimeZonetimezone;publicRuntimeManager(IStoredSettingssettings){this(settings,null);}publicRuntimeManager(IStoredSettingssettings,FilebaseFolder){this.settings=settings;this.settingsModel=newServerSettings();this.serverStatus=newServerStatus();this.baseFolder=baseFolder==null?newFile(""):baseFolder;}@OverridepublicRuntimeManagerstart(){logger.info("Basefolder : "+baseFolder.getAbsolutePath());logger.info("Settings : "+settings.toString());logTimezone("JVM timezone: ",TimeZone.getDefault());logTimezone("App timezone: ",getTimezone());returnthis;}@OverridepublicRuntimeManagerstop(){returnthis;}@OverridepublicFilegetBaseFolder(){returnbaseFolder;}@OverridepublicvoidsetBaseFolder(Filefolder){this.baseFolder=folder;}/** * Returns the boot date of the Gitblit server. * * @return the boot date of Gitblit */@OverridepublicDategetBootDate(){returnserverStatus.bootDate;}@OverridepublicServerSettingsgetSettingsModel(){// ensure that the current values are updated in the setting modelsfor(Stringkey:settings.getAllKeys(null)){SettingModelsetting=settingsModel.get(key);if(setting==null){// unreferenced setting, create a setting modelsetting=newSettingModel();setting.name=key;settingsModel.add(setting);}setting.currentValue=settings.getString(key,"");}// settingsModel.pushScripts = getAllScripts();returnsettingsModel;}/** * Determine if this Gitblit instance is actively serving git repositories * or if it is merely a repository viewer. * * @return true if Gitblit is serving repositories */@OverridepublicbooleanisServingRepositories(){returnsettings.getBoolean(Keys.git.enableGitServlet,true)||(settings.getInteger(Keys.git.daemonPort,0)>0);}/** * Returns the preferred timezone for the Gitblit instance. * * @return a timezone */@OverridepublicTimeZonegetTimezone(){if(timezone==null){Stringtzid=settings.getString(Keys.web.timezone,null);if(StringUtils.isEmpty(tzid)){timezone=TimeZone.getDefault();returntimezone;}timezone=TimeZone.getTimeZone(tzid);}returntimezone;}privatevoidlogTimezone(Stringtype,TimeZonezone){SimpleDateFormatdf=newSimpleDateFormat("z Z");df.setTimeZone(zone);Stringoffset=df.format(newDate());logger.info("{}{} ({})",newObject[]{type,zone.getID(),offset});}/** * Is Gitblit running in debug mode? * * @return true if Gitblit is running in debug mode */@OverridepublicbooleanisDebugMode(){returnsettings.getBoolean(Keys.web.debugMode,false);}/** * Returns the file object for the specified configuration key. * * @return the file */@OverridepublicFilegetFileOrFolder(Stringkey,StringdefaultFileOrFolder){StringfileOrFolder=settings.getString(key,defaultFileOrFolder);returngetFileOrFolder(fileOrFolder);}/** * Returns the file object which may have it's base-path determined by * environment variables for running on a cloud hosting service. All Gitblit * file or folder retrievals are (at least initially) funneled through this * method so it is the correct point to globally override/alter filesystem * access based on environment or some other indicator. * * @return the file */@OverridepublicFilegetFileOrFolder(StringfileOrFolder){returncom.gitblit.utils.FileUtils.resolveParameter(Constants.baseFolder$,baseFolder,fileOrFolder);}/** * Returns the runtime settings. * * @return runtime settings */@OverridepublicIStoredSettingsgetSettings(){returnsettings;}/** * Updates the runtime settings. * * @param settings * @return true if the update succeeded */@OverridepublicbooleanupdateSettings(Map<String,String>updatedSettings){returnsettings.saveSettings(updatedSettings);}@OverridepublicServerStatusgetStatus(){// update heap memory statusserverStatus.heapAllocated=Runtime.getRuntime().totalMemory();serverStatus.heapFree=Runtime.getRuntime().freeMemory();returnserverStatus;}}