public virtual void OnBeforeRequest(BeforeRequestWebApiEventArgs e) { var handler = BeforeRequest; if (handler != null) { handler(this, e); } }
private void OnBeforeRequest(object sender, BeforeRequestWebApiEventArgs args) { var documentDatabase = args.Database; if (documentDatabase != null) { documentDatabase.WorkContext.MetricsCounters.ConcurrentRequests.Mark(); documentDatabase.WorkContext.MetricsCounters.RequestsPerSecondCounter.Mark(); } var fileSystem = args.FileSystem; if (fileSystem != null) { fileSystem.MetricsCounters.ConcurrentRequests.Mark(); fileSystem.MetricsCounters.RequestsPerSecondCounter.Mark(); } }
public virtual void OnBeforeRequest(BeforeRequestWebApiEventArgs e) { var handler = BeforeRequest; if (handler != null) handler(this, e); }
public override bool SetupRequestToProperDatabase(RequestManager rm) { var tenantId = DatabaseName; if (string.IsNullOrWhiteSpace(tenantId) || tenantId == "<system>") { landlord.LastRecentlyUsed.AddOrUpdate("System", SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); var args = new BeforeRequestWebApiEventArgs { Controller = this, IgnoreRequest = false, TenantId = "System", Database = landlord.SystemDatabase }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } return(true); } Task <DocumentDatabase> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var msg = "Could not open database named: " + tenantId; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(30)) == false) { var msg = "The database " + tenantId + " is currently being loaded, but after 30 seconds, this request has been aborted. Please try again later, database loading continues."; Logger.Warn(msg); throw new HttpException(503, msg); } var args = new BeforeRequestWebApiEventArgs() { Controller = this, IgnoreRequest = false, TenantId = tenantId, Database = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } } catch (Exception e) { string exceptionMessage = e.Message; var aggregateException = e as AggregateException; if (aggregateException != null) { exceptionMessage = aggregateException.ExtractSingleInnerException().Message; } var msg = "Could not open database named: " + tenantId + Environment.NewLine + exceptionMessage; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a database named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return(true); }
public override bool SetupRequestToProperDatabase(RequestManager rm) { if (!RavenFileSystem.IsRemoteDifferentialCompressionInstalled) { throw new HttpException(503, "File Systems functionality is not supported. Remote Differential Compression is not installed."); } var tenantId = FileSystemName; if (string.IsNullOrWhiteSpace(tenantId)) { throw new HttpException(503, "Could not find a file system with no name"); } var landlord = this.FileSystemsLandlord; Task <RavenFileSystem> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var se = e.SimplifyException(); var msg = "Could not open file system named: " + tenantId + ", " + se.Message; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(30)) == false) { var msg = "The filesystem " + tenantId + " is currently being loaded, but after 30 seconds, this request has been aborted. Please try again later, file system loading continues."; Logger.Warn(msg); throw new HttpException(503, msg); } var args = new BeforeRequestWebApiEventArgs() { Controller = this, IgnoreRequest = false, TenantId = tenantId, FileSystem = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } } catch (Exception e) { var msg = "Could not open file system named: " + tenantId + ", " + e.InnerException.Message; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a file system named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return(true); }
public override bool SetupRequestToProperDatabase(RequestManager rm) { var tenantId = DatabaseName; if (string.IsNullOrWhiteSpace(tenantId) || tenantId == "<system>") { landlord.LastRecentlyUsed.AddOrUpdate("System", SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); var args = new BeforeRequestWebApiEventArgs { Controller = this, IgnoreRequest = false, TenantId = "System", Database = landlord.SystemDatabase }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) return false; return true; } Task<DocumentDatabase> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var msg = "Could not open database named: " + tenantId; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(30)) == false) { var msg = "The database " + tenantId + " is currently being loaded, but after 30 seconds, this request has been aborted. Please try again later, database loading continues."; Logger.Warn(msg); throw new TimeoutException(msg); } var args = new BeforeRequestWebApiEventArgs() { Controller = this, IgnoreRequest = false, TenantId = tenantId, Database = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) return false; } catch (Exception e) { string exceptionMessage = e.Message; var aggregateException = e as AggregateException; if (aggregateException != null) { exceptionMessage = aggregateException.ExtractSingleInnerException().Message; } var msg = "Could not open database named: " + tenantId + Environment.NewLine + exceptionMessage; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a database named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return true; }
public override bool SetupRequestToProperDatabase(RequestManager rm) { var tenantId = this.DatabaseName; var landlord = this.DatabasesLandlord; if (string.IsNullOrWhiteSpace(tenantId) || tenantId == "<system>") { landlord.LastRecentlyUsed.AddOrUpdate("System", SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); var args = new BeforeRequestWebApiEventArgs { Controller = this, IgnoreRequest = false, TenantId = "System", Database = landlord.SystemDatabase }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) return false; return true; } Task<DocumentDatabase> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var msg = "Could not open database named: " + tenantId + " " + e.Message; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { int TimeToWaitForDatabaseToLoad = MaxSecondsForTaskToWaitForDatabaseToLoad; if (resourceStoreTask.IsCompleted == false && resourceStoreTask.IsFaulted == false) { if (MaxNumberOfThreadsForDatabaseToLoad.Wait(0) == false) { var msg = string.Format("The database {0} is currently being loaded, but there are too many requests waiting for database load. Please try again later, database loading continues.", tenantId); Logger.Warn(msg); throw new TimeoutException(msg); } try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(TimeToWaitForDatabaseToLoad)) == false) { var msg = string.Format("The database {0} is currently being loaded, but after {1} seconds, this request has been aborted. Please try again later, database loading continues.", tenantId, TimeToWaitForDatabaseToLoad); Logger.Warn(msg); throw new TimeoutException(msg); } } finally { MaxNumberOfThreadsForDatabaseToLoad.Release(); } } var args = new BeforeRequestWebApiEventArgs() { Controller = this, IgnoreRequest = false, TenantId = tenantId, Database = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) return false; } catch (Exception e) { var msg = "Could not open database named: " + tenantId + Environment.NewLine + e; Logger.WarnException(msg, e); throw new HttpException(503, msg,e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a database named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return true; }
public override bool SetupRequestToProperDatabase(RequestManager rm) { var tenantId = CountersName; if (string.IsNullOrWhiteSpace(tenantId)) { throw new HttpException(503, "Could not find a counter with no name"); } Task <CounterStorage> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var msg = "Could open counter named: " + tenantId; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(30)) == false) { var msg = "The counter " + tenantId + " is currently being loaded, but after 30 seconds, this request has been aborted. Please try again later, file system loading continues."; Logger.Warn(msg); throw new HttpException(503, msg); } var args = new BeforeRequestWebApiEventArgs { Controller = this, IgnoreRequest = false, TenantId = tenantId, Counters = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } } catch (Exception e) { var msg = "Could open counters named: " + tenantId; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a counter named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return(true); }
public override bool SetupRequestToProperDatabase(RequestManager rm) { var tenantId = this.DatabaseName; var landlord = this.DatabasesLandlord; if (string.IsNullOrWhiteSpace(tenantId) || tenantId == "<system>") { landlord.LastRecentlyUsed.AddOrUpdate("System", SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); var args = new BeforeRequestWebApiEventArgs { Controller = this, IgnoreRequest = false, TenantId = "System", Database = landlord.SystemDatabase }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } return(true); } Task <DocumentDatabase> resourceStoreTask; bool hasDb; try { hasDb = landlord.TryGetOrCreateResourceStore(tenantId, out resourceStoreTask); } catch (Exception e) { var msg = "Could not open database named: " + tenantId + " " + e.Message; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } if (hasDb) { try { int TimeToWaitForDatabaseToLoad = MaxSecondsForTaskToWaitForDatabaseToLoad; if (resourceStoreTask.IsCompleted == false && resourceStoreTask.IsFaulted == false) { if (MaxNumberOfThreadsForDatabaseToLoad.Wait(0) == false) { var msg = string.Format("The database {0} is currently being loaded, but there are too many requests waiting for database load. Please try again later, database loading continues.", tenantId); Logger.Warn(msg); throw new TimeoutException(msg); } try { if (resourceStoreTask.Wait(TimeSpan.FromSeconds(TimeToWaitForDatabaseToLoad)) == false) { var msg = string.Format("The database {0} is currently being loaded, but after {1} seconds, this request has been aborted. Please try again later, database loading continues.", tenantId, TimeToWaitForDatabaseToLoad); Logger.Warn(msg); throw new TimeoutException(msg); } } finally { MaxNumberOfThreadsForDatabaseToLoad.Release(); } } var args = new BeforeRequestWebApiEventArgs() { Controller = this, IgnoreRequest = false, TenantId = tenantId, Database = resourceStoreTask.Result }; rm.OnBeforeRequest(args); if (args.IgnoreRequest) { return(false); } } catch (Exception e) { var msg = "Could not open database named: " + tenantId + Environment.NewLine + e; Logger.WarnException(msg, e); throw new HttpException(503, msg, e); } landlord.LastRecentlyUsed.AddOrUpdate(tenantId, SystemTime.UtcNow, (s, time) => SystemTime.UtcNow); } else { var msg = "Could not find a database named: " + tenantId; Logger.Warn(msg); throw new HttpException(503, msg); } return(true); }