Makine Olayları API¶
Uç nokta¶
text
GET /api/v1/machine-events
Çözümlenmiş kiracı ve makine için alarms koleksiyonundan imleç tabanlı sayfalanmış makine alarm olaylarını döndüren salt okunur uç nokta.
Sözleşme referansı: api/openapi.yaml
Kimlik doğrulama¶
AUTH_ENABLED=true iken istekler JWT Bearer erişim token'ı içermelidir:
http
Authorization: Bearer <access_token>
AUTH_ENABLED=false iken uç nokta yerel geliştirme için açıktır.
Eksik token 401 AUTHENTICATION_REQUIRED, geçersiz veya süresi dolmuş token 401 INVALID_TOKEN döner.
Accept müzakere¶
| Değer | Açıklama |
|---|---|
application/json |
JSON yanıt (Accept gönderilmezse varsayılan) |
application/xml |
XML yanıt |
text/xml |
XML yanıt |
*/* |
JSON yanıt |
Desteklenmeyen Accept değerleri 406 Not Acceptable (NOT_ACCEPTABLE) döner.
Kiracı bağlamı¶
company_id ve organization_id isteğe bağlı sorgu parametreleridir. Token claim'lerinden türetilmez.
| Durum | Sonuç |
|---|---|
| Her iki sorgu değeri mevcut | İstek çifti kullanılır |
| Hiç sorgu değeri yok | Her iki ortam değeri yapılandırılmışsa DEFAULT_COMPANY_ID ve DEFAULT_ORGANIZATION_ID kullanılır |
| Tam olarak bir sorgu değeri | 400 TENANT_CONTEXT_INCOMPLETE (ortam varsayılanları uygulanmaz) |
| Ne sorgu ne yapılandırılmış varsayılan | 400 TENANT_CONTEXT_REQUIRED |
| Sağlanan değerde geçersiz ObjectID | 400 INVALID_TENANT_CONTEXT |
Tüm okumalar çözümlenmiş kiracıya kapsamlanır. Servis kiracı filtresi olmadan çalışmaz.
Başlangıçtaki yapılandırma doğrulaması:
- Her iki
DEFAULT_*boş → izin verilir - Her ikisi geçerli ObjectID → izin verilir
- Yalnızca biri set → başlangıç doğrulama hatası
Bkz. Yapılandırma.
Sorgu parametreleri¶
| Parametre | Zorunlu | Açıklama |
|---|---|---|
machine_code |
Evet | Çözümlenmiş kiracı içinde makine kodu |
company_id |
Hayır | Kiracı şirket ObjectID (çift kuralı geçerli) |
organization_id |
Hayır | Kiracı organizasyon ObjectID (çift kuralı geçerli) |
project_code |
Hayır | Proje koduna göre filtre |
production_code |
Hayır | Üretim koduna göre filtre |
production_stage_code |
Hayır | Üretim aşama koduna göre filtre |
start_time |
Hayır | Alt sınır (RFC 3339; ofset kabul edilir, UTC'ye normalize) |
end_time |
Hayır | Üst sınır (RFC 3339; ofset kabul edilir, UTC'ye normalize) |
limit |
Hayır | Sayfa boyutu. Varsayılan 100, minimum 1, maksimum 1000 |
cursor |
Hayır | Önceki yanıttan opak imleç |
Maksimum tarih aralığı sınırı yoktur. start_time ve end_time birlikte verildiğinde start_time, end_time'dan kesinlikle önce olmalıdır.
end_time verilmezse etkin üst sınır, istek işleme anındaki güncel UTC zamandır.
Sayfalama¶
Anahtar kümesi sayfalama (timestamp DESC, _id DESC) kullanır.
- Yanıttaki
effective_end_timeimleç zinciri için sabitlenir - İmleçler bu sınırı ve filtre parmak izini taşır
- Son sayfada
pagination.next_cursornullolur - Boş sonuç HTTP 200 ve
"items": []döner
Yanıt eşlemesi¶
| API alanı | Kaynak / kural |
|---|---|
production_stage_code |
MongoDB production_stage alanı |
event_type, type_code |
Normalize edilmiş kanonik snake_case |
timestamp, effective_end_time |
Z sonekli RFC 3339 UTC |
status |
API yanıtından hariç tutulur |
reconnecting olayları |
Dahil edilir; eski aliaslar (reconnect, re-connect, re_connect, büyük/küçük harf fark etmez) yalnız kanonik reconnecting değerine normalize edilir |
Her öğe iç içe employees, input_products ve output_products dizileri içerebilir.
Örnek istek¶
http
GET /api/v1/machine-events?machine_code=MACHINE-001&company_id=6a2bc9fbeb8679852cddac2a&organization_id=6a2bd388eb8679852cddac2c&limit=50 HTTP/1.1
Host: localhost:8080
Authorization: Bearer <access_token>
Accept: application/json
Örnek yanıt¶
json
{
"success": true,
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"data": {
"effective_end_time": "2026-08-06T15:00:00Z",
"items": [
{
"machine_name": "CNC Makinesi",
"machine_code": "MACHINE-001",
"event_type": "stop",
"timestamp": "2026-08-06T14:30:00Z",
"employees": [],
"input_products": [],
"output_products": [],
"project_name": "Proje Adı",
"project_code": "PROJE-001",
"production_code": "URETIM-001",
"production_name": "Üretim Emri Adı",
"production_stage_code": "ASAMA-001",
"stop_answer_reason": "",
"type_code": "planned"
}
],
"pagination": {
"limit": 50,
"returned_count": 1,
"has_more": false,
"next_cursor": null
}
},
"error": null
}
Hata yanıtları¶
| HTTP | Kod | Ne zaman |
|---|---|---|
| 400 | MACHINE_CODE_REQUIRED |
machine_code eksik veya boş |
| 400 | TENANT_CONTEXT_REQUIRED |
Sorguda kiracı yok ve yapılandırılmış varsayılan yok |
| 400 | TENANT_CONTEXT_INCOMPLETE |
Sorguda company_id / organization_id'den yalnızca biri |
| 400 | INVALID_TENANT_CONTEXT |
Kiracı alanlarında geçersiz ObjectID |
| 400 | INVALID_START_TIME / INVALID_END_TIME |
Hatalı biçimlendirilmiş zaman parametresi |
| 400 | INVALID_TIME_RANGE |
start_time, end_time'dan önce değil |
| 400 | INVALID_LIMIT |
limit 1–1000 dışında |
| 400 | INVALID_CURSOR |
İmleç geçersiz veya filtre uyuşmazlığı |
| 401 | AUTHENTICATION_REQUIRED / INVALID_TOKEN |
Kimlik doğrulama hatası |
| 404 | MACHINE_NOT_FOUND |
Kiracı + machine_code için makine yok |
| 406 | NOT_ACCEPTABLE |
Desteklenmeyen Accept |
| 503 | DATABASE_UNAVAILABLE |
MongoDB kullanılamıyor |
Bkz. Hata Kodları.
Veritabanı indeksleri¶
Benzersiz olmayan alarm indeksleri migration CLI ile oluşturulur (istek başına değil):
ix_alarms_machine_timestamp_id_desc— makine olayları anahtar kümesi sayfalamaix_alarms_project_production_stage_machine_timestamp_id— kapsamlı alarm taramaları
Üretimde bu uç noktalara güvenmeden önce migration'ları dağıtım sürecinize göre çalıştırın.