I was thinking of getting statistics of the usage of our REST API.
With this technique I could do it without modifying my current
classes, in an orthogonal way.

This opens up many possibilities.

Regards!

Esteban A. Maringolo


2014-06-16 17:33 GMT-03:00 Tudor Girba <[email protected]>:
> Very nice example!
>
> Doru
>
>
> On Mon, Jun 16, 2014 at 5:29 PM, Sven Van Caekenberghe <[email protected]> wrote:
>>
>> Hi,
>>
>> Here is a concrete example of how cool object logging can be. In the
>> current development version, Zinc HTTP Components announces a number of
>> ZnLogEvent objects while either ZnClient or ZnServer operates. One of those
>> is ZnServerTransactionEvent, which signals the completion of a single HTTP
>> transaction (request/response pair) by the server. By subscribing to this
>> specific event through Zinc's Announcer, we can simply count the number of
>> transactions. If we report and reset this counter every second, we get a
>> rudimentary live updating requests per second monitor, in about ten lines of
>> code in a workspace !
>>
>> Here is the setup:
>>
>> | transactionCount transactionsPerSecond |
>> transactionCount := 0.
>> transactionsPerSecond := 0 asValueHolder inspectWithLabel: 'HTTP req/s'.
>> ZnLogEvent announcer
>>   when: ZnServerTransactionEvent
>>   do: [ :each | transactionCount := transactionCount + 1 ]
>>   for: #transactionCountDemo.
>> [ [
>>   1 second asDelay wait.
>>   transactionsPerSecond value: transactionCount.
>>   transactionCount := 0 ] repeat ]
>>     forkAt: Processor userBackgroundPriority
>>     named: #transactionCountDemo.
>>
>> Then we start the server:
>>
>> ZnServer startDefaultOn: 8080.
>>
>> In a terminal, we use ab (the Apache Benchmark tool) to generate some load
>> on the server (10K requests for 1K random data, using 4 concurrent threads):
>>
>> $ ab -k -n 10240 -c 4 http://localhost:8080/random/1024
>>
>> Here is a short 2 minute screencast showing this little demo in action (be
>> sure to select the HD version):
>>
>>   https://www.youtube.com/watch?v=gaUxPNq6_7c
>>
>> It starts by showing how a AnnouncementSpy can be used to monitor the
>> server starting up and handling a single request - the logging from the
>> client is visible as well. The lines in the AnnouncementSpy are not just
>> text, but full, detailed objects. We inspect and explore the same
>> transaction from both the client and server perspective.
>>
>> Next is the demo of the live updating requests per second monitor with the
>> load described above. You can see that both our counter and ab report
>> approximately the same number: about 800-900 req/s.
>>
>> And finally, here is the cleanup code:
>>
>> ZnLogEvent announcer unsubscribe: #transactionCountDemo.
>> ZnServer stopDefault.
>> Process allInstances select: [ :each | each name = #transactionCountDemo ]
>> thenDo: #terminate.
>>
>> Note that by using other data elements in the ZnServerTransactionEvent we
>> could track bytes transferring in or out, rates of failure, slow requests
>> and so. There are lots of possibilities with object logging left to explore,
>> as well as lots to learn.
>>
>> Sven
>>
>>
>
>
>
> --
> www.tudorgirba.com
>
> "Every thing has its own flow"

Reply via email to