Skip to content

Commit

Permalink
visual host run in memory again
Browse files Browse the repository at this point in the history
  • Loading branch information
ayende committed May 11, 2012
1 parent fdb043b commit fa435d8
Showing 1 changed file with 180 additions and 179 deletions.
359 changes: 180 additions & 179 deletions Raven.VisualHost/Shell.cs
Original file line number Original file line Diff line number Diff line change
@@ -1,186 +1,187 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Windows.Forms; using System.Windows.Forms;
using Raven.Abstractions.Data; using Raven.Abstractions.Data;
using Raven.Abstractions.Replication; using Raven.Abstractions.Replication;
using Raven.Client.Document; using Raven.Client.Document;
using Raven.Database.Config; using Raven.Database.Config;
using Raven.Database.Server; using Raven.Database.Server;
using Raven.Database.Server.Abstractions; using Raven.Database.Server.Abstractions;
using Raven.Json.Linq; using Raven.Json.Linq;
using Raven.Server; using Raven.Server;
using Raven.Client.Extensions; using Raven.Client.Extensions;


namespace Raven.VisualHost namespace Raven.VisualHost
{ {
public partial class Shell : Form public partial class Shell : Form
{ {
private bool ignoreHilo = true; private bool ignoreHilo = true;
readonly List<RavenDbServer> servers = new List<RavenDbServer>(); readonly List<RavenDbServer> servers = new List<RavenDbServer>();
public Shell() public Shell()
{ {
InitializeComponent(); InitializeComponent();
} }


private void StartServers_Click(object sender, EventArgs e) private void StartServers_Click(object sender, EventArgs e)
{ {
Reset(); Reset();


for (int i = 0; i < NumberOfServers.Value; i++) for (int i = 0; i < NumberOfServers.Value; i++)
{ {
var port = 8079 - i; var port = 8079 - i;
var ravenDbServer = new RavenDbServer(new RavenConfiguration var ravenDbServer = new RavenDbServer(new RavenConfiguration
{ {
Port = port, Port = port,
DataDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Server-" + port, "Data"), //DataDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Server-" + port, "Data"),
AnonymousUserAccessMode = AnonymousUserAccessMode.All RunInMemory = true,
}); AnonymousUserAccessMode = AnonymousUserAccessMode.All

});
var serverLog = new ServerLog
{ var serverLog = new ServerLog
Server = ravenDbServer, {
Dock = DockStyle.Fill, Server = ravenDbServer,
Url = ravenDbServer.Server.Configuration.ServerUrl Dock = DockStyle.Fill,
}; Url = ravenDbServer.Server.Configuration.ServerUrl
ServerTabs.TabPages.Add(serverLog.Url); };
var tabPage = ServerTabs.TabPages[ServerTabs.TabPages.Count - 1]; ServerTabs.TabPages.Add(serverLog.Url);
tabPage.Tag = serverLog; var tabPage = ServerTabs.TabPages[ServerTabs.TabPages.Count - 1];
ravenDbServer.Server.BeforeDispatchingRequest = context => tabPage.Tag = serverLog;
{ ravenDbServer.Server.BeforeDispatchingRequest = context =>
var adaptHttpContext = AdaptHttpContext(context, serverLog); {
if (adaptHttpContext != null) var adaptHttpContext = AdaptHttpContext(context, serverLog);
{ if (adaptHttpContext != null)
var increment = serverLog.IncrementRequest(); {
BeginInvoke((Action) (() => var increment = serverLog.IncrementRequest();
{ BeginInvoke((Action) (() =>
tabPage.Text = string.Format("{0} ({1})", serverLog.Url, increment); {
})); tabPage.Text = string.Format("{0} ({1})", serverLog.Url, increment);
} }));
}
return adaptHttpContext;
}; return adaptHttpContext;
servers.Add(ravenDbServer); };

servers.Add(ravenDbServer);
tabPage.Controls.Add(serverLog);
} tabPage.Controls.Add(serverLog);
} }

}
private readonly string[] pathsToFilter = new[]
{ private readonly string[] pathsToFilter = new[]
"/docs/Raven/Replication/Destinations", {
"/favicon.ico" "/docs/Raven/Replication/Destinations",
}; "/favicon.ico"

};
private Action AdaptHttpContext(IHttpContext httpContext, ServerLog serverLog)
{ private Action AdaptHttpContext(IHttpContext httpContext, ServerLog serverLog)
if (pathsToFilter.Contains(httpContext.Request.Url.AbsolutePath)) {
return null; if (pathsToFilter.Contains(httpContext.Request.Url.AbsolutePath))
if (ignoreHilo && httpContext.Request.Url.AbsolutePath.StartsWith("/docs/Raven/Hilo/")) return null;
return null; if (ignoreHilo && httpContext.Request.Url.AbsolutePath.StartsWith("/docs/Raven/Hilo/"))
if (httpContext.Request.Headers["Raven-Timer-Request"] != null) return null;
return null; if (httpContext.Request.Headers["Raven-Timer-Request"] != null)

return null;
var requestStream = new MemoryStream();
httpContext.SetRequestFilter(stream => var requestStream = new MemoryStream();
{ httpContext.SetRequestFilter(stream =>
stream.CopyTo(requestStream); {
return new MemoryStream(requestStream.ToArray()); stream.CopyTo(requestStream);
}); return new MemoryStream(requestStream.ToArray());
var responseStream = new MemoryStream(); });
httpContext.SetResponseFilter(stream => new MultiStreamWriter(responseStream, stream)); var responseStream = new MemoryStream();

httpContext.SetResponseFilter(stream => new MultiStreamWriter(responseStream, stream));
var trackedRequest = new TrackedRequest
{ var trackedRequest = new TrackedRequest
Method = httpContext.Request.HttpMethod, {
Url = httpContext.Request.RawUrl, Method = httpContext.Request.HttpMethod,
RequestHeaders = new NameValueCollection(httpContext.Request.Headers), Url = httpContext.Request.RawUrl,
RequestContent = requestStream, RequestHeaders = new NameValueCollection(httpContext.Request.Headers),
ResponseContent = responseStream, RequestContent = requestStream,
ResponseHeaders = httpContext.Response.GetHeaders(), ResponseContent = responseStream,
}; ResponseHeaders = httpContext.Response.GetHeaders(),

};
return () =>
{ return () =>
trackedRequest.Status = httpContext.Response.StatusCode; {
serverLog.AddRequest(trackedRequest); trackedRequest.Status = httpContext.Response.StatusCode;
}; serverLog.AddRequest(trackedRequest);
} };

}
private void Reset()
{ private void Reset()
foreach (var ravenDbServer in servers) {
{ foreach (var ravenDbServer in servers)
ravenDbServer.Dispose(); {
} ravenDbServer.Dispose();
servers.Clear(); }
ServerTabs.TabPages.Clear(); servers.Clear();
} ServerTabs.TabPages.Clear();

}
private void clearToolStripMenuItem_Click(object sender, EventArgs e)
{ private void clearToolStripMenuItem_Click(object sender, EventArgs e)
foreach (TabPage serverLog in ServerTabs.TabPages) {
{ foreach (TabPage serverLog in ServerTabs.TabPages)
ServerLog log = ((ServerLog)serverLog.Tag); {
log.Clear(); ServerLog log = ((ServerLog)serverLog.Tag);
serverLog.Text = log.Url; log.Clear();
} serverLog.Text = log.Url;
} }

}
private void ignoreHiloToolStripMenuItem_Click(object sender, EventArgs e)
{ private void ignoreHiloToolStripMenuItem_Click(object sender, EventArgs e)
((ToolStripMenuItem) sender).Checked = ignoreHilo = !ignoreHilo; {
} ((ToolStripMenuItem) sender).Checked = ignoreHilo = !ignoreHilo;

}
private void setupMasterMasterReplicationToolStripMenuItem_Click(object sender, EventArgs e)
{ private void setupMasterMasterReplicationToolStripMenuItem_Click(object sender, EventArgs e)
foreach (var ravenDbServer in servers) {
{ foreach (var ravenDbServer in servers)
var replicationServer = servers.Where(s => s != ravenDbServer); {

var replicationServer = servers.Where(s => s != ravenDbServer);
var doc = new RavenJObject
{ var doc = new RavenJObject
{ {
"Destinations", new RavenJArray(replicationServer.Select(s => new RavenJObject {
{ "Destinations", new RavenJArray(replicationServer.Select(s => new RavenJObject
{"Url", s.Database.Configuration.ServerUrl} {
})) {"Url", s.Database.Configuration.ServerUrl}
} }))
}; }
ravenDbServer.Database.Put("Raven/Replication/Destinations", null, doc, new RavenJObject(), null); };
} ravenDbServer.Database.Put("Raven/Replication/Destinations", null, doc, new RavenJObject(), null);

}
MessageBox.Show("Setup replication between all servers (Master/Master)");

MessageBox.Show("Setup replication between all servers (Master/Master)");
}

}
private void setupSlaveMasterReplicationToolStripMenuItem_Click(object sender, EventArgs e)
{ private void setupSlaveMasterReplicationToolStripMenuItem_Click(object sender, EventArgs e)
var ravenDbServer = servers.FirstOrDefault(); {
if (ravenDbServer == null) var ravenDbServer = servers.FirstOrDefault();
return; if (ravenDbServer == null)

return;
var replicationServer = servers.Where(s => s != ravenDbServer);

var replicationServer = servers.Where(s => s != ravenDbServer);
var doc = new RavenJObject
{ var doc = new RavenJObject
{ {
"Destinations", new RavenJArray(replicationServer.Select(s => new RavenJObject {
{ "Destinations", new RavenJArray(replicationServer.Select(s => new RavenJObject
{"Url", s.Database.Configuration.ServerUrl} {
})) {"Url", s.Database.Configuration.ServerUrl}
} }))
}; }
ravenDbServer.Database.Put("Raven/Replication/Destinations", null, doc, new RavenJObject(), null); };

ravenDbServer.Database.Put("Raven/Replication/Destinations", null, doc, new RavenJObject(), null);
MessageBox.Show("Setup replication between all servers (Master/Slave)");
MessageBox.Show("Setup replication between all servers (Master/Slave)");
} }


private void setupDatbasesToolStripMenuItem_Click(object sender, EventArgs e) private void setupDatbasesToolStripMenuItem_Click(object sender, EventArgs e)
Expand Down Expand Up @@ -210,6 +211,6 @@ private void setupDatbasesToolStripMenuItem_Click(object sender, EventArgs e)
docStore.DatabaseCommands.Put("Raven/Replication/Destinations", null, doc, new RavenJObject()); docStore.DatabaseCommands.Put("Raven/Replication/Destinations", null, doc, new RavenJObject());
} }
} }
} }
} }
} }

0 comments on commit fa435d8

Please sign in to comment.