Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3. using Akka.Actor;
  4.  
  5. namespace TestMonitoring
  6. {
  7. public interface IMonitorActor
  8. {
  9. ActorTask OnStartReceive(string actorTypeName, string actorPath, object message);
  10. void OnFinishReceive(ActorTask actorTask);
  11. }
  12.  
  13. public class ConsoleMonitorActor : IMonitorActor
  14. {
  15. public ActorTask OnStartReceive(string actorTypeName, string actorPath, object message)
  16. {
  17. var actorTask = new ActorTask(Guid.NewGuid().ToString("N"), Stopwatch.StartNew());
  18. Console.WriteLine($"MonitorActor => {actorTypeName} - OnStartReceive: {message} - TaskId: {actorTask.TaskId}");
  19. return actorTask;
  20. }
  21.  
  22. public void OnFinishReceive(ActorTask actorTask)
  23. {
  24. actorTask.Stopwatch.Stop();
  25. Console.WriteLine($"MonitorActor => OnFinishReceive: {actorTask.Stopwatch.Elapsed}");
  26. }
  27.  
  28. }
  29.  
  30. public sealed class ActorTask
  31. {
  32. public ActorTask(string taskId, Stopwatch stopwatch)
  33. {
  34. TaskId = taskId;
  35. Stopwatch = stopwatch;
  36. }
  37.  
  38. public string TaskId { get; }
  39. public Stopwatch Stopwatch { get; }
  40. }
  41.  
  42. public abstract class MonitoredReceiveActor : ReceiveActor
  43. {
  44. private readonly IMonitorActor _monitorActor;
  45.  
  46. protected MonitoredReceiveActor(IMonitorActor monitorActor)
  47. {
  48. _monitorActor = monitorActor;
  49. }
  50.  
  51. protected void MonitoredReceive<T>(Action<T> action)
  52. {
  53. Receive<T>(value =>
  54. {
  55. var actorTask = _monitorActor.OnStartReceive(nameof(MonitoredReceiveActor), Self.Path.ToString(), value);
  56. action(value);
  57. _monitorActor.OnFinishReceive(actorTask);
  58. });
  59. }
  60. }
  61.  
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement