Miço - Kapsamlı Rapor Nasıl Hazırlanır?
Published: 2023-07-17 05:29:14


#1. SQL Sorgusu Oluşturma

- Miço veritabanındaki veriler kullanılarak rapor oluşturmak üzere SQL sorgusu yazılır.

**Örnek:** Veritabanındaki makinelerin sertifikaları hakkında bir sorgu oluşturulur:

```
select 
    m.id 
    , m.hostname
    , c.subject
from certificates c inner join machines m  on c.machine_id = m.id;
```
- Bu SQL sorgusu, "certificates" ve "machines" isimli iki tabloyu birleştirir. Bu birleştirme, "certificates" tablosundaki "machine_id" ve "machines" tablosundaki "id" alanlarının eşleşmesine dayanır.

- Sorgu sonucunda, her bir sertifikanın konusunu ("subject"), ilgili makinenin kimliğini ("id") ve adını ("hostname") elde ediyoruz. Bu, belirli bir sertifikaya karşılık gelen makinenin bilgilerini görmemizi sağlar.

#2. SQL Sorgusunu YAML Dosyasına Çevirme

**hasjoin:** SQL sorgusunda birden fazla tablo kullanılıp kullanılmayacağını belirtir. Eğer true ise, SQL sorgusunda birleştirme (JOIN) işlemi gerçekleştirilecektir.

**hascondition:** SQL sorgusunda bir veya daha fazla filtreleme (WHERE) koşulu olup olmayacağını belirtir. Eğer true ise, conditions bölümünde belirtilen koşullar kullanılacaktır.

**name:** Raporun adıdır.

**description:** Raporun genel açıklamasıdır.

**supportedos:** Raporun hangi işletim sistemlerini desteklediğini belirtir. Bu değer all, linux, windows gibi seçenekler olabilir.

**author:** Raporu oluşturan kişi veya kuruluşun adıdır.

**group:** SQL sorgusunda GROUP BY kullanılarak gruplandırma yapılacak sütunları belirtir. Gruplandırma, belirli bir sütundaki benzersiz değerlere göre sonuçları toplar.

**category:** Raporun hangi kategorilere ait olduğunu belirtir. Bu alan birden fazla değer içerebilir ve genellikle raporları sınıflandırmak için kullanılır.

**selectcolumns:** SQL sorgusunda SELECT ile seçilen sütunları belirtir. Bu sütunlar, sonuçta gösterilecek olan sütunlardır.

**tables:** SQL sorgusunda FROM ifadesinde kullanılan tabloları belirtir. name tablo adını, pkcolumn birincil anahtar sütununu, isprimary ise hangi tablonun ana tablo olduğunu belirtir.

**logicoperators:** SQL sorgusundaki koşulları birleştiren mantıksal operatörleri belirtir. Genellikle AND ve OR operatörleri kullanılır.

**conditions:** SQL sorgusundaki WHERE ifadesinde kullanılan koşulları belirtir. type karşılaştırma tipini (like, =, !=, <, >, etc.), table ve column koşulun hangi tablo ve sütunda uygulanacağını, variable ise karşılaştırılacak değeri belirtir.

- Örnek olarak verilen SQL sorgusunu YAML formatına çevirirsek, şu şekilde gözükecektir:

```
hasjoin: true
hascondition: false
name: Sertifikalar
description: This template creates an report about machines certificates.
supportedos: all
author: HAVELSAN A.Ş.
group:
    - machines.hostname
    - machines.os_name
    - machines.ip_addr
    - certificates.subject
category:
    - general
selectcolumns:
    - machines.hostname
    - machines.os_name
    - machines.ip_addr
    - certificates.subject
tables:
    - name: certificates
      pkcolumn: id
      isprimary: true
    - name: machines
      pkcolumn: machine_id
      isprimary: false
logicoperators:
    - AND
    - OR
```

- "Sertifikalar" adı verilen bir rapor oluşturulacak ve bu rapor, makine sertifikiları hakkında bilgi içerecek.

- Bu YAML dosyasının, daha önceki SQL sorgusuna şu şekilde karşılık gelir:

→ **name**, **description**, **supportedos**, **author** ve **category** alanları, raporun meta verilerini tanımlar. Bu, sorguyla doğrudan ilgili olmayabilir ancak raporun kim tarafından oluşturulduğu,hangi işletim sistemlerini desteklediği ve hangi kategorilere ait olduğu gibi bilgiler içerir.

→ **group** ve **setcolumns** alanları, SQL sorgusundaki SELECT ifadesine karşılık gelir. Bu alanlar, raporun hangi sütunları içereceğini belirtir.

→ **tables** alanı, SQL sorgusundaki FROM ve INNER JOIN ifadelerine karşılık gelir. Bu alan, hangi tabloların sorguda kullanılacağını ve bu tabloların hangi sütunlarının primary key olduğunu belirtir. isprimary değeri, hangi tablonun ana tablo olduğunu belirtir. true olan tablo ana tablodur ve false olan tablo ile birleştirilir.

→ **logicoperators** alanı, SQL sorgusundaki koşul operatörlerini belirtir (AND, OR).