smart_message 0.0.10 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/deploy-github-pages.yml +38 -0
  3. data/.gitignore +5 -0
  4. data/CHANGELOG.md +64 -0
  5. data/Gemfile.lock +35 -4
  6. data/README.md +169 -71
  7. data/Rakefile +29 -4
  8. data/docs/assets/images/ddq_architecture.svg +130 -0
  9. data/docs/assets/images/dlq_architecture.svg +115 -0
  10. data/docs/assets/images/enhanced-dual-publishing.svg +136 -0
  11. data/docs/assets/images/enhanced-fluent-api.svg +149 -0
  12. data/docs/assets/images/enhanced-microservices-routing.svg +115 -0
  13. data/docs/assets/images/enhanced-pattern-matching.svg +107 -0
  14. data/docs/assets/images/fluent-api-demo.svg +59 -0
  15. data/docs/assets/images/performance-comparison.svg +161 -0
  16. data/docs/assets/images/redis-basic-architecture.svg +53 -0
  17. data/docs/assets/images/redis-enhanced-architecture.svg +88 -0
  18. data/docs/assets/images/redis-queue-architecture.svg +101 -0
  19. data/docs/assets/images/smart_message.jpg +0 -0
  20. data/docs/assets/images/smart_message_walking.jpg +0 -0
  21. data/docs/assets/images/smartmessage_architecture_overview.svg +173 -0
  22. data/docs/assets/images/transport-comparison-matrix.svg +171 -0
  23. data/docs/assets/javascripts/mathjax.js +17 -0
  24. data/docs/assets/stylesheets/extra.css +51 -0
  25. data/docs/{addressing.md → core-concepts/addressing.md} +5 -7
  26. data/docs/{architecture.md → core-concepts/architecture.md} +80 -145
  27. data/docs/{dispatcher.md → core-concepts/dispatcher.md} +21 -21
  28. data/docs/{message_filtering.md → core-concepts/message-filtering.md} +2 -3
  29. data/docs/{message_processing.md → core-concepts/message-processing.md} +17 -17
  30. data/docs/{troubleshooting.md → development/troubleshooting.md} +7 -7
  31. data/docs/{examples.md → getting-started/examples.md} +103 -89
  32. data/docs/{getting-started.md → getting-started/quick-start.md} +47 -23
  33. data/docs/index.md +64 -0
  34. data/docs/{dead_letter_queue.md → reference/dead-letter-queue.md} +2 -3
  35. data/docs/{logging.md → reference/logging.md} +1 -1
  36. data/docs/{message_deduplication.md → reference/message-deduplication.md} +1 -0
  37. data/docs/{proc_handlers_summary.md → reference/proc-handlers.md} +7 -6
  38. data/docs/reference/serializers.md +245 -0
  39. data/docs/{transports.md → reference/transports.md} +9 -11
  40. data/docs/transports/memory-transport.md +374 -0
  41. data/docs/transports/redis-transport-comparison.md +361 -0
  42. data/docs/transports/redis-transport.md +490 -0
  43. data/examples/README.md +104 -14
  44. data/examples/city_scenario/911_emergency_call_flow.svg +99 -0
  45. data/examples/city_scenario/README.md +515 -0
  46. data/examples/city_scenario/ai_visitor_intelligence_flow.svg +108 -0
  47. data/examples/city_scenario/citizen.rb +195 -0
  48. data/examples/city_scenario/city_diagram.svg +125 -0
  49. data/examples/city_scenario/common/health_monitor.rb +80 -0
  50. data/examples/city_scenario/common/logger.rb +30 -0
  51. data/examples/city_scenario/emergency_dispatch_center.rb +270 -0
  52. data/examples/city_scenario/fire_department.rb +446 -0
  53. data/examples/city_scenario/fire_emergency_flow.svg +95 -0
  54. data/examples/city_scenario/health_department.rb +100 -0
  55. data/examples/city_scenario/health_monitoring_system.svg +130 -0
  56. data/examples/city_scenario/house.rb +244 -0
  57. data/examples/city_scenario/local_bank.rb +217 -0
  58. data/examples/city_scenario/messages/emergency_911_message.rb +80 -0
  59. data/examples/city_scenario/messages/emergency_resolved_message.rb +42 -0
  60. data/examples/city_scenario/messages/fire_dispatch_message.rb +42 -0
  61. data/examples/city_scenario/messages/fire_emergency_message.rb +44 -0
  62. data/examples/city_scenario/messages/health_check_message.rb +21 -0
  63. data/examples/city_scenario/messages/health_status_message.rb +34 -0
  64. data/examples/city_scenario/messages/police_dispatch_message.rb +45 -0
  65. data/examples/city_scenario/messages/silent_alarm_message.rb +37 -0
  66. data/examples/city_scenario/police_department.rb +316 -0
  67. data/examples/city_scenario/redis_monitor.rb +129 -0
  68. data/examples/city_scenario/redis_stats.rb +743 -0
  69. data/examples/city_scenario/room_for_improvement.md +240 -0
  70. data/examples/city_scenario/security_emergency_flow.svg +95 -0
  71. data/examples/city_scenario/service_internal_architecture.svg +154 -0
  72. data/examples/city_scenario/smart_message_ai_agent.rb +364 -0
  73. data/examples/city_scenario/start_demo.sh +236 -0
  74. data/examples/city_scenario/stop_demo.sh +106 -0
  75. data/examples/city_scenario/visitor.rb +631 -0
  76. data/examples/{10_message_deduplication.rb → memory/01_message_deduplication_demo.rb} +1 -3
  77. data/examples/{09_dead_letter_queue_demo.rb → memory/02_dead_letter_queue_demo.rb} +10 -40
  78. data/examples/{01_point_to_point_orders.rb → memory/03_point_to_point_orders.rb} +1 -3
  79. data/examples/{02_publish_subscribe_events.rb → memory/04_publish_subscribe_events.rb} +1 -2
  80. data/examples/{03_many_to_many_chat.rb → memory/05_many_to_many_chat.rb} +1 -4
  81. data/examples/{show_me.rb → memory/06_pretty_print_demo.rb} +1 -1
  82. data/examples/{05_proc_handlers.rb → memory/07_proc_handlers_demo.rb} +1 -2
  83. data/examples/{06_custom_logger_example.rb → memory/08_custom_logger_demo.rb} +13 -14
  84. data/examples/{07_error_handling_scenarios.rb → memory/09_error_handling_demo.rb} +1 -4
  85. data/examples/{08_entity_addressing_basic.rb → memory/10_entity_addressing_basic.rb} +2 -8
  86. data/examples/{08_entity_addressing_with_filtering.rb → memory/11_entity_addressing_with_filtering.rb} +2 -6
  87. data/examples/{09_regex_filtering_microservices.rb → memory/12_regex_filtering_microservices.rb} +1 -2
  88. data/examples/{10_header_block_configuration.rb → memory/13_header_block_configuration.rb} +1 -6
  89. data/examples/{11_global_configuration_example.rb → memory/14_global_configuration_demo.rb} +17 -8
  90. data/examples/{show_logger.rb → memory/15_logger_demo.rb} +1 -2
  91. data/examples/memory/README.md +163 -0
  92. data/examples/memory/memory_transport_architecture.svg +90 -0
  93. data/examples/memory/point_to_point_pattern.svg +94 -0
  94. data/examples/memory/publish_subscribe_pattern.svg +125 -0
  95. data/examples/{04_redis_smart_home_iot.rb → redis/01_smart_home_iot_demo.rb} +1 -5
  96. data/examples/redis/README.md +228 -0
  97. data/examples/redis/alert_system_flow.svg +127 -0
  98. data/examples/redis/dashboard_status_flow.svg +107 -0
  99. data/examples/redis/device_command_flow.svg +113 -0
  100. data/examples/redis/redis_transport_architecture.svg +115 -0
  101. data/examples/{smart_home_iot_dataflow.md → redis/smart_home_iot_dataflow.md} +4 -116
  102. data/examples/redis/smart_home_system_architecture.svg +133 -0
  103. data/ideas/README.md +41 -0
  104. data/ideas/agents.md +1001 -0
  105. data/ideas/database_transport.md +980 -0
  106. data/ideas/improvement.md +359 -0
  107. data/ideas/meshage.md +1788 -0
  108. data/ideas/message_discovery.md +178 -0
  109. data/ideas/message_schema.md +1381 -0
  110. data/lib/smart_message/.idea/.gitignore +8 -0
  111. data/lib/smart_message/.idea/markdown.xml +6 -0
  112. data/lib/smart_message/.idea/misc.xml +4 -0
  113. data/lib/smart_message/.idea/modules.xml +8 -0
  114. data/lib/smart_message/.idea/smart_message.iml +16 -0
  115. data/lib/smart_message/.idea/vcs.xml +6 -0
  116. data/lib/smart_message/addressing.rb +15 -0
  117. data/lib/smart_message/base.rb +19 -12
  118. data/lib/smart_message/configuration.rb +2 -23
  119. data/lib/smart_message/dead_letter_queue.rb +1 -1
  120. data/lib/smart_message/logger.rb +15 -4
  121. data/lib/smart_message/messaging.rb +3 -62
  122. data/lib/smart_message/plugins.rb +6 -44
  123. data/lib/smart_message/serializer.rb +14 -0
  124. data/lib/smart_message/transport/base.rb +42 -8
  125. data/lib/smart_message/transport/memory_transport.rb +23 -4
  126. data/lib/smart_message/transport/redis_transport.rb +11 -0
  127. data/lib/smart_message/transport/stdout_transport.rb +28 -10
  128. data/lib/smart_message/transport.rb +33 -1
  129. data/lib/smart_message/version.rb +1 -1
  130. data/lib/smart_message.rb +5 -52
  131. data/mkdocs.yml +184 -0
  132. data/p2p_plan.md +326 -0
  133. data/p2p_roadmap.md +287 -0
  134. data/smart_message.gemspec +2 -0
  135. data/smart_message.svg +51 -0
  136. metadata +145 -45
  137. data/docs/README.md +0 -57
  138. data/docs/serializers.md +0 -575
  139. data/examples/dead_letters.jsonl +0 -12
  140. data/examples/temp.txt +0 -94
  141. data/examples/tmux_chat/README.md +0 -283
  142. data/examples/tmux_chat/bot_agent.rb +0 -278
  143. data/examples/tmux_chat/human_agent.rb +0 -199
  144. data/examples/tmux_chat/room_monitor.rb +0 -160
  145. data/examples/tmux_chat/shared_chat_system.rb +0 -328
  146. data/examples/tmux_chat/start_chat_demo.sh +0 -190
  147. data/examples/tmux_chat/stop_chat_demo.sh +0 -22
  148. /data/docs/{properties.md → core-concepts/properties.md} +0 -0
  149. /data/docs/{ideas_to_think_about.md → development/ideas.md} +0 -0
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env ruby
2
+ # examples/multi_program_demo/redis_monitor.rb
3
+ #
4
+ # Redis Monitor for SmartMessage Traffic
5
+ # Shows formatted, real-time message activity
6
+
7
+ require 'redis'
8
+ require 'json'
9
+
10
+ class RedisMonitor
11
+ def initialize
12
+ @redis = Redis.new
13
+ puts "🔍 SmartMessage Redis Monitor"
14
+ puts " Monitoring Redis pub/sub traffic..."
15
+ puts " Press Ctrl+C to stop\n\n"
16
+ setup_signal_handlers
17
+ end
18
+
19
+ def setup_signal_handlers
20
+ %w[INT TERM].each do |signal|
21
+ Signal.trap(signal) do
22
+ puts "\n🔍 Redis monitor shutting down..."
23
+ exit(0)
24
+ end
25
+ end
26
+ end
27
+
28
+ def start_monitoring
29
+ # Use psubscribe to catch all channels
30
+ @redis.psubscribe("*") do |on|
31
+ on.pmessage do |pattern, channel, message|
32
+ display_message(channel, message)
33
+ end
34
+ end
35
+ rescue => e
36
+ puts "❌ Error monitoring Redis: #{e.message}"
37
+ retry
38
+ end
39
+
40
+ private
41
+
42
+ def display_message(channel, message)
43
+ begin
44
+ data = JSON.parse(message)
45
+ header = data['_sm_header'] || {}
46
+ payload = data['_sm_payload'] || {}
47
+
48
+ timestamp = Time.now.strftime('%H:%M:%S')
49
+ from = header['from'] || 'unknown'
50
+ to = header['to'] || 'broadcast'
51
+ message_class = header['message_class'] || channel
52
+
53
+ # Color code by message type
54
+ color = message_color(message_class)
55
+
56
+ puts "#{color}[#{timestamp}] #{message_class}#{color_reset}"
57
+ puts " 📤 From: #{from}"
58
+ puts " 📥 To: #{to}"
59
+
60
+ # Show relevant payload details
61
+ show_payload_details(message_class, payload)
62
+ puts ""
63
+
64
+ rescue JSON::ParserError
65
+ # Handle non-JSON messages
66
+ puts "📋 [#{Time.now.strftime('%H:%M:%S')}] #{channel}: #{message[0..100]}..."
67
+ puts ""
68
+ end
69
+ end
70
+
71
+ def show_payload_details(message_class, payload)
72
+ case message_class
73
+ when /HealthCheck/
74
+ puts " 🏥 Check ID: #{payload['check_id'][0..7]}..."
75
+ when /HealthStatus/
76
+ status_color = status_color(payload['status'])
77
+ puts " #{status_color}📊 #{payload['service_name']}: #{payload['status'].upcase}#{color_reset}"
78
+ puts " 📝 #{payload['details']}"
79
+ when /FireEmergency/
80
+ puts " 🔥 #{payload['house_address']} - #{payload['fire_type']} (#{payload['severity']})"
81
+ puts " 👥 Occupants: #{payload['occupants_status']}"
82
+ when /FireDispatch/
83
+ puts " 🚒 Engines: #{payload['engines_assigned']&.join(', ')}"
84
+ puts " 📍 Location: #{payload['location']}"
85
+ puts " ⏱️ ETA: #{payload['estimated_arrival']}"
86
+ when /SilentAlarm/
87
+ puts " 🚨 #{payload['bank_name']} - #{payload['alarm_type']} (#{payload['severity']})"
88
+ puts " 📍 #{payload['location']}"
89
+ when /PoliceDispatch/
90
+ puts " 🚔 Units: #{payload['units_assigned']&.join(', ')}"
91
+ puts " 📍 Location: #{payload['location']}"
92
+ puts " ⏱️ ETA: #{payload['estimated_arrival']}"
93
+ when /EmergencyResolved/
94
+ puts " ✅ #{payload['incident_type']} resolved"
95
+ puts " 📍 #{payload['location']}"
96
+ puts " ⏱️ Duration: #{payload['duration_minutes']} minutes"
97
+ end
98
+ end
99
+
100
+ def message_color(message_class)
101
+ case message_class
102
+ when /Health/ then "\e[32m" # Green
103
+ when /Fire/ then "\e[31m" # Red
104
+ when /Police/ then "\e[34m" # Blue
105
+ when /Alarm/ then "\e[33m" # Yellow
106
+ when /Emergency/ then "\e[35m" # Magenta
107
+ else "\e[37m" # White
108
+ end
109
+ end
110
+
111
+ def status_color(status)
112
+ case status
113
+ when 'healthy' then "\e[32m" # Green
114
+ when 'warning' then "\e[33m" # Yellow
115
+ when 'critical' then "\e[93m" # Orange
116
+ when 'failed' then "\e[31m" # Red
117
+ else "\e[0m"
118
+ end
119
+ end
120
+
121
+ def color_reset
122
+ "\e[0m"
123
+ end
124
+ end
125
+
126
+ if __FILE__ == $0
127
+ monitor = RedisMonitor.new
128
+ monitor.start_monitoring
129
+ end