public override bool OnStart() { // Not sure what this should be. Hopefully storage over smb doesn't open a million connections ServicePointManager.DefaultConnectionLimit = 12; #region Load Config Settings nodeName = RoleEnvironment.CurrentRoleInstance.Id; string UseElasticLocalDataFolder = CloudConfigurationManager.GetSetting("UseElasticLocalDataFolder"); string javaInstaller = CloudConfigurationManager.GetSetting("JavaInstallerName"); string javaDownloadURL = CloudConfigurationManager.GetSetting("JavaDownloadURL"); string elasticsearchZip = CloudConfigurationManager.GetSetting("ElasticsearchZip"); string elasticsearchDownloadURL = CloudConfigurationManager.GetSetting("ElasticsearchDownloadURL"); string elasticsearchPluginContainer = CloudConfigurationManager.GetSetting("ElasticsearchPluginContainer"); string shareName = CloudConfigurationManager.GetSetting("ShareName"); //root path for es data string shareDrive = CloudConfigurationManager.GetSetting("ShareDrive"); //Drive letter to map azure share string endpointName = CloudConfigurationManager.GetSetting("EndpointName"); string archiveRoot = RoleEnvironment.GetLocalResource("ArchiveRoot").RootPath; string logRoot = RoleEnvironment.GetLocalResource("LogRoot").RootPath; string elasticDataRoot = RoleEnvironment.GetLocalResource("ElasticDataRoot").RootPath; string elasticRoot = RoleEnvironment.GetLocalResource("ElasticRoot").RootPath; string emulatorDataRoot = RoleEnvironment.GetLocalResource("EmulatorDataRoot").RootPath; // we need this cause we can't emulate shares string roleRoot = Environment.GetEnvironmentVariable("ROLEROOT"); string tempPath = RoleEnvironment.GetLocalResource("CustomTempRoot").RootPath; //Standard temp folder is too small /** * Issue #1. In azure the role root is just a drive letter. Unfortunately, System.IO doesn't add needed slash * so Path.Combine("E:","path\to\file") yields E:path\to\file * Still hoping there is a .net api that I an use to avoid the code below. */ if (!roleRoot.EndsWith(@"\")) { roleRoot += @"\"; } #endregion #region Configure Java manager //Are we downloading java from storage or regular url? string javaDownloadType = CloudConfigurationManager.GetSetting("JavaDownloadType"); WebArtifact javaArtifact; if (!string.IsNullOrWhiteSpace(javaDownloadType) && javaDownloadType == "storage") { javaArtifact = new StorageArtifact(javaDownloadURL, javaInstaller, storage); } else { javaArtifact = new WebArtifact(javaDownloadURL, javaInstaller); } javaManager = new JavaManager(javaArtifact, archiveRoot, logRoot); //Java installer #endregion #region Configure Elasticsearch manager //Are we downloading elasticsearch from storage or regular url? string elasticsearchDownloadType = CloudConfigurationManager.GetSetting("ElasticsearchDownloadType"); WebArtifact elasticsearchArtifact; if (!string.IsNullOrWhiteSpace(elasticsearchDownloadType) && elasticsearchDownloadType == "storage") { elasticsearchArtifact = new StorageArtifact(elasticsearchDownloadURL, elasticsearchZip, storage); } else { elasticsearchArtifact = new WebArtifact(elasticsearchDownloadURL, elasticsearchZip); } bridge = new PipesRuntimeBridge(endpointName); //Discovery helper if (UseElasticLocalDataFolder.ToLower() != "true") { //Azure file is not available in emulator if (!RoleEnvironment.IsEmulated) { // Mount a drive for a CloudFileShare. Trace.WriteLine("Configuring file Share"); var share = storage.CreateCloudFileClient() .GetShareReference(shareName); share.CreateIfNotExists(); Trace.WriteLine("Mapping Share to " + shareDrive); share.Mount(shareDrive); } else { shareDrive = emulatorDataRoot; } } else { shareDrive = elasticDataRoot; } var runtimeConfig = new ElasticsearchRuntimeConfig { DataPath = shareDrive, LogPath = logRoot, TempPath = tempPath, NodeName = nodeName, BridgePipeName = bridge.PipeName, PackagePluginPath = Path.Combine(roleRoot, "approot", "plugins"), TemplateConfigFile = Path.Combine(roleRoot, "approot", "config", ElasticsearchManager.ELASTICSEARCH_CONFIG_FILE), TemplateLogConfigFile = Path.Combine(roleRoot, "approot", "config", ElasticsearchManager.ELASTICSEARCH_LOG_CONFIG_FILE) }; elasticsearchManager = new ElasticsearchManager(runtimeConfig, elasticsearchArtifact, archiveRoot, elasticRoot, logRoot); if (!string.IsNullOrWhiteSpace(elasticsearchPluginContainer)) { elasticsearchManager.AddPluginSource(elasticsearchPluginContainer, storage); } #endregion bool result = base.OnStart(); Trace.TraceInformation("ElasticsearchRole has been started"); return(result); }
public string PostBackProc(string data, [AllowNull] string user, int userRights) { NameValueCollection parts = HttpUtility.ParseQueryString(data); string form = parts["id"]; ///// /// /// PluginConfig config = this.pluginConfig; string action = parts["id"]; if (NameToIdWithPrefix(SaveButtonName) == action) { try { PopulatePluginConfig(config, parts); config.FireConfigChanged(); this.divToUpdate.Add(SuccessDivId, "Settings updated successfully"); } catch (Exception e) { pluginInstance.LogError(string.Format("Error updating settings: {0}", e.Message)); this.divToUpdate.Add(ErrorDivId, "Error updating settings"); } } else if (NameToIdWithPrefix(TestButtonName) == action) { PluginConfig testConfig; using (testConfig = new PluginConfig(HS, true)) { PopulatePluginConfig(testConfig, parts); ConnectionTestResults results = ElasticsearchManager.PerformConnectivityTest(testConfig); if (results.ConnectionSuccessful) { StringBuilder stb = new StringBuilder(); stb.Append(@"<div>"); stb.Append(@"<h3>Connection Test Successful!<h3>"); stb.Append(BuildClusterHealthView(results.ClusterHealth)); stb.Append(@"</div>"); this.divToUpdate.Add(SuccessDivId, stb.ToString()); this.divToUpdate.Add(ErrorDivId, ""); } else { string message = "Connection test failed"; if (results.ClusterHealth != null && results.ClusterHealth.OriginalException != null) { message += ": " + results.ClusterHealth.OriginalException.Message; } this.divToUpdate.Add(SuccessDivId, ""); this.divToUpdate.Add(ErrorDivId, message); } } } return(base.postBackProc(Name, data, user, userRights)); }