Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added business metric on terminal booking status from core-catalog kafka #23

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions core-booking/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ dependencies {
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
implementation("org.springframework.kafka:spring-kafka")
implementation("io.micrometer:micrometer-core:1.13.5")
implementation("io.micrometer:micrometer-registry-prometheus:1.13.5")
implementation("org.springframework.boot:spring-boot-starter-actuator:3.3.4")
implementation("io.micrometer:micrometer-core")
implementation("io.micrometer:micrometer-registry-prometheus")
implementation("org.springframework.boot:spring-boot-starter-actuator:3.3.0")
}

tasks.test {
Expand Down
27 changes: 27 additions & 0 deletions core-booking/src/main/kotlin/service/BookingMetricsService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.example.service

import io.micrometer.core.instrument.Counter
import io.micrometer.core.instrument.MeterRegistry
import org.example.model.Reservation
import org.springframework.stereotype.Component

@Component
class BookingMetricsService(meterRegistry: MeterRegistry) {
private val successCounter: Counter = Counter.builder("booking_status_success_count")
.description("Count of successful bookings")
.tags("status", "SUCCESS")
.register(meterRegistry)

private val failedCounter: Counter = Counter.builder("booking_status_failed_count")
.description("Count of failed bookings")
.tags("status", "FAILED")
.register(meterRegistry)

internal fun incrementBookingMetric(status: Reservation.ReservationStatus) {
when (status) {
Reservation.ReservationStatus.SUCCESS -> successCounter.increment()
Reservation.ReservationStatus.FAILED -> failedCounter.increment()
else -> {}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.ObjectMapper
import org.example.model.Reservation
import org.example.model.ReservationRepository
import org.example.service.BookingMetricsService
import org.springframework.kafka.annotation.KafkaListener
import org.springframework.stereotype.Service
import java.time.Instant
Expand All @@ -13,6 +14,7 @@ import java.util.UUID
class CoreCatalogEventsListener(
private val reservationRepository: ReservationRepository,
private val objectMapper: ObjectMapper,
private val bookingMetricsService: BookingMetricsService,
) {

@KafkaListener(topics = ["\${spring.kafka.consumer.topic.name}"], groupId = "\${spring.kafka.consumer.group-id}")
Expand All @@ -30,6 +32,8 @@ class CoreCatalogEventsListener(
reason = reservationEvent.reason,
expectedStatus = Reservation.ReservationStatus.IN_PROGRESS,
)

bookingMetricsService.incrementBookingMetric(updatedStatus)
}

internal fun fromCoreCatalogStatus(status: String) =
Expand Down
19 changes: 11 additions & 8 deletions core-booking/src/main/resources/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,14 @@ management:
endpoints:
web:
exposure:
include: health,prometheus
metrics:
export:
prometheus:
enabled: true
distribution:
percentiles-histogram:
"[http.server.requests]": true
include: 'prometheus,health'
endpoint:
prometheus:
enabled: true
metrics:
export:
prometheus:
enabled: true
distribution:
percentiles-histogram:
"[http.server.requests]": true
10 changes: 10 additions & 0 deletions metrics/config/grafana/provisioning/dashboards/all.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: 1
providers:
- name: 'default'
folder: 'default'
type: file
allowUiUpdates: true
updateIntervalSeconds: 30
options:
path: /etc/grafana/provisioning/dashboards
foldersFromFilesStructure: true
Loading