Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit 606f998

Browse files
print stream http endpoints to console
1 parent 4590354 commit 606f998

1 file changed

Lines changed: 27 additions & 14 deletions

File tree

src/SqlStreamStore.HAL.DevServer/Program.cs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
System.Func<
1616
System.Collections.Generic.IDictionary<string, object>,
1717
System.Threading.Tasks.Task>>;
18+
1819
using BuildFunc = System.Action<
1920
System.Func<
2021
System.Func<
@@ -44,24 +45,24 @@ public static async Task<int> Main(string[] args)
4445
using(var server = new KestrelOwinServer(options))
4546
using(var streamStore = new InMemoryStreamStore())
4647
{
47-
await server.Start(new UriBuilder
48-
{
49-
Port = port
50-
}.Uri.ToString(), Configure(streamStore), CancellationToken.None);
48+
var url = new UriBuilder { Port = port }.Uri.ToString();
49+
var owinPipeline = Configure(streamStore);
50+
51+
await server.Start(url, owinPipeline, CancellationToken.None);
5152

52-
DisplayMenu(streamStore);
53+
DisplayMenu(streamStore, url);
5354
}
5455

5556
return 0;
5657
}
5758

5859
private static Action<BuildFunc> Configure(IStreamStore streamStore)
5960
=> builder => builder
60-
.Use(DisplayErrors)
61+
.Use(CatchAndDisplayErrors)
6162
.Use(AllowAllOrigins)
6263
.Use(SqlStreamStoreHalMiddleware.UseSqlStreamStoreHal(streamStore));
6364

64-
private static MidFunc DisplayErrors => next => async env =>
65+
private static MidFunc CatchAndDisplayErrors => next => async env =>
6566
{
6667
try
6768
{
@@ -87,10 +88,11 @@ private static Action<BuildFunc> Configure(IStreamStore streamStore)
8788
return next(env);
8889
};
8990

90-
private static void DisplayMenu(IStreamStore streamStore)
91+
private static void DisplayMenu(IStreamStore streamStore, string url)
9192
{
9293
while(true)
9394
{
95+
Console.WriteLine("Using stream store: {0}", streamStore.GetType().Name);
9496
Console.WriteLine("Press w to write 10 messages each to 100 streams");
9597
Console.WriteLine("Press t to write 100 messages each to 10 streams");
9698
Console.WriteLine("Press ESC to exit");
@@ -102,10 +104,10 @@ private static void DisplayMenu(IStreamStore streamStore)
102104
case ConsoleKey.Escape:
103105
return;
104106
case ConsoleKey.W:
105-
Write(streamStore, 10, 100);
107+
Write(streamStore, url, 10, 100);
106108
break;
107109
case ConsoleKey.T:
108-
Write(streamStore, 100, 10);
110+
Write(streamStore, url, 100, 10);
109111
break;
110112
default:
111113
Console.WriteLine("Computer says no");
@@ -114,21 +116,32 @@ private static void DisplayMenu(IStreamStore streamStore)
114116
}
115117
}
116118

117-
private static void Write(IStreamStore streamStore, int messageCount, int streamCount)
118-
=> Task.Run(() => Task.WhenAll(
119-
from streamId in Enumerable.Range(0, streamCount).Select(_ => $"test-{Guid.NewGuid():n}")
119+
private static void Write(IStreamStore streamStore, string url, int messageCount, int streamCount)
120+
{
121+
var streams = Enumerable.Range(0, streamCount).Select(_ => $"test-{Guid.NewGuid():n}").ToList();
122+
123+
var streamIds = string.Join("\n", streams.Select(streamid => $"{url}streams/{streamid}"));
124+
125+
Console.WriteLine("\nAbout to create the following streams: ");
126+
Console.WriteLine(streamIds);
127+
128+
Task.Run(() => Task.WhenAll(
129+
from streamId in streams
120130
select streamStore.AppendToStream(streamId,
121131
ExpectedVersion.NoStream,
122132
GenerateMessages(messageCount))));
133+
}
123134

124135
private static NewStreamMessage[] GenerateMessages(int messageCount)
125-
=> Enumerable.Range(0, messageCount)
136+
{
137+
return Enumerable.Range(0, messageCount)
126138
.Select(_ => new NewStreamMessage(
127139
Guid.NewGuid(),
128140
"test",
129141
$@"{{ ""foo"": ""{Guid.NewGuid()}"", ""baz"": {{ }}, ""qux"": [ {string.Join(", ", Enumerable
130142
.Range(0, messageCount).Select(max => s_random.Next(max)))} ] }}",
131143
"{}"))
132144
.ToArray();
145+
}
133146
}
134147
}

0 commit comments

Comments
 (0)