nats_messaging 1.3.3 → 1.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d2aa054ec87eb2b517fee19cf9fc95ab24272d4d7abfbb4be23f9bc6f69bade
4
- data.tar.gz: 33a12037a86f957869b3e2d82647cb85bd30ef1c5ec069ca38c33c4e6db2edf8
3
+ metadata.gz: 173adfe7dc254c451bc1528849cca140ab2e58fe8b70fc401e2cc99c63129291
4
+ data.tar.gz: 319351fff7b6f01eca2f7749be32f4aaef3f85578b090665ac5cca9e8baebac7
5
5
  SHA512:
6
- metadata.gz: c7a88046e189d663afc455d9d793b4cb1c926946f7640429b553d7e660ed028edbd373f90703a0834bc38c613e3709353f3d7d3a51bcd9d75924475ee7e96708
7
- data.tar.gz: eb41ca4e03d01496d5781f5e2fef3be5621a1b72b7d38a521a773e7ee12030803440ab51546afc2068b44ee4969dda2580353b09b21d784997f3765e5ddd3c1c
6
+ metadata.gz: 44357756fdd1b5c61862f7f709a067cf7101f65bdc06ed8d46a480a7db5b8ff8685eb91b2c58cfb53aeba8eceaa3c08c661bd84e128e5873840ad70bea647af8
7
+ data.tar.gz: e0f968253ef4467574ef4ea607b36ee0b0fbe39c64a39b0807718fb4e564624dcb7edcbd4c0c340bc931d39300a570bcd89801145032350b47627fa766761ca0
@@ -12,46 +12,54 @@ module NatsMessaging
12
12
  @subscriptions = {} # Store active subscriptions
13
13
  end
14
14
 
15
+ def log_duration(start_time, message_format, *args)
16
+ duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time
17
+ full_message = "NATS [%.2fs]: #{message_format}" % [duration, *args]
18
+ Rails.logger.info full_message
19
+ end
20
+
15
21
  # Create a stream
16
22
  def create_stream(stream_name, subjects)
17
23
  begin
24
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
18
25
  stream = @js.stream_info(stream_name)
19
- puts "NATS: Stream #{stream_name} already exists"
26
+ log_duration(start_time, "Stream %s already exists", stream_name)
20
27
  rescue NATS::JetStream::Error::NotFound
21
28
  @js.add_stream(name: stream_name, subjects: subjects)
22
- puts "NATS: Stream #{stream_name} created"
29
+ log_duration(start_time, "Stream %s created", stream_name)
23
30
  rescue => e
24
- puts "NATS: Failed to create stream: #{e.message}"
31
+ log_duration(start_time, "Failed to create stream: %s", e.message)
25
32
  end
26
33
  end
27
34
 
28
35
  # Publish a message to a subject using MessagePack
29
36
  def publish_message(subject, message)
30
37
  packed_message = message.to_msgpack # Serializar a MessagePack
31
-
32
38
  if @js
33
39
  begin
40
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
34
41
  ack = @js.publish(subject, packed_message)
35
- puts "NATS: Message sent to #{subject}: #{message}, ACK: #{ack.inspect}"
42
+ log_duration(start_time, "Message sent to %s: %s, ACK: %s", subject, message, ack.inspect)
36
43
  rescue NATS::JetStream::Error::NotFound
37
44
  @nats.publish(subject, packed_message)
38
- puts "NATS: Stream not found, falling back to regular NATS publish"
45
+ log_duration(start_time, "Stream not found, falling back to regular NATS publish for subject %s", subject)
39
46
  rescue => e
40
- puts "NATS: Unexpected error: #{e.message}"
47
+ log_duration(start_time, "Unexpected error while publishing to %s: %s", subject, e.message)
41
48
  end
42
49
  else
43
50
  begin
51
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
44
52
  @nats.publish(subject, packed_message)
45
- puts "NATS: Message sent to #{subject}: #{message}, ACK: #{ack.inspect}"
53
+ log_duration(start_time, "Message sent to %s: %s", subject, message)
46
54
  rescue => e
47
- puts "NATS: Unexpected error: #{e.message}"
55
+ log_duration(start_time, "Unexpected error: %s", e.message)
48
56
  end
49
57
  end
50
58
  end
51
59
 
52
60
  # Subscribe to a subject using MessagePack
53
61
  def subscribe_to_subject(subject, durable_name = "durable_name")
54
- puts "NATS: Subscribing to #{subject}"
62
+ Rails.logger.info "NATS: Subscribing to #{subject}"
55
63
  if @js
56
64
  @subscriptions[subject] = @js.subscribe(subject, durable: durable_name) do |msg|
57
65
  unpacked_data = process_received_message(msg, subject)
@@ -70,29 +78,31 @@ module NatsMessaging
70
78
  # Process received message
71
79
  def process_received_message(msg, subject)
72
80
  begin
81
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
73
82
  unpacked_data = MessagePack.unpack(msg.data)
74
- puts "NATS: Message received on #{subject}: #{unpacked_data}"
83
+ log_duration(start_time, "Message received on %s: %s", subject, unpacked_data.inspect)
75
84
  unpacked_data
76
85
  rescue => e
77
- puts "NATS: Error while processing message: #{e.message}"
86
+ log_duration(start_time, "Error while processing message on %s: %s", subject, e.message)
78
87
  end
79
88
  end
80
89
 
81
90
  # Send a request to a subject and wait for response using MessagePack
82
91
  def send_request(subject, message, timeout = 5)
83
- puts "NATS: Sending request to #{subject} with message: #{message}"
92
+ Rails.logger.info "NATS: Sending request to #{subject} with message: #{message}"
93
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
84
94
  begin
85
95
  packed_message = message.to_msgpack # Serializar el mensaje
86
96
  response = @nats.request(subject, packed_message, timeout: timeout) # Timeout of 5 seconds or custom
87
97
  unpacked_response = MessagePack.unpack(response.data) # Deserializar respuesta
88
- puts "NATS: Received reply: #{unpacked_response}"
98
+ log_duration(start_time, "Received reply: %s", unpacked_response.inspect)
89
99
  yield(subject, unpacked_response) if block_given?
90
100
  unpacked_response
91
101
  rescue NATS::IO::Timeout
92
- puts "NATS: Request timed out for subject: #{subject}"
102
+ log_duration(start_time, "Request timed out for subject: %s", subject)
93
103
  nil
94
104
  rescue => e
95
- puts "NATS: Unexpected error: #{e.message}"
105
+ log_duration(start_time, "Unexpected error for subject %s: %s", subject, e.message)
96
106
  nil
97
107
  end
98
108
  end
@@ -105,30 +115,31 @@ module NatsMessaging
105
115
  end
106
116
  begin
107
117
  # Create a new subscription
108
- puts "NATS: Listening on #{subject} with reply message: #{reply_message}"
118
+ Rails.logger.info "NATS: Listening on #{subject} with reply message: #{reply_message}"
119
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) # En caso de que falle antes del segundo begin
109
120
  @subscriptions[subject] = @nats.subscribe(subject) do |msg|
110
121
  begin
122
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
111
123
  unpacked_data = MessagePack.unpack(msg.data) # Deserializar mensaje recibido
112
- puts "NATS: Received request on #{subject}: #{unpacked_data}"
124
+ Rails.logger.info "NATS: Received request on #{subject}: #{unpacked_data}"
113
125
  yield_return = yield(subject, unpacked_data) if block_given?
114
126
  reply = reply_message.nil? ? yield_return : reply_message
115
127
  packed_reply = reply.to_msgpack # Serializar respuesta
116
128
  # Asegurar que msg.reply existe antes de responder
117
129
  if msg.reply
118
130
  @nats.publish(msg.reply, packed_reply)
119
- puts "NATS: Replied to #{subject} with message: #{reply}"
131
+ log_duration(start_time, "Replied to %s with message: %s", subject, reply.inspect)
120
132
  else
121
- puts "NATS: No reply subject for #{subject}, cannot respond"
133
+ log_duration(start_time, "No reply subject for %s, cannot respond", subject)
122
134
  end
123
135
  unpacked_data
124
136
  rescue => e
125
- puts "NATS: Error while processing message: #{e.message}"
137
+ log_duration(start_time, "Error while processing message on %s: %s", subject, e.message)
126
138
  end
127
139
  end
128
140
  rescue => e
129
- puts "NATS: Error while replying: #{e.message}"
141
+ log_duration(start_time, "Error while replying: %s", e.message)
130
142
  end
131
143
  end
132
-
133
144
  end
134
145
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nats_messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bea Graboloza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-08 00:00:00.000000000 Z
11
+ date: 2025-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nats-pure