MongoDb'ye bağlanma

mongo mongodb://localhost:25080 --authenticationDatabase "admin" -u "apinizer" -p 
POWERSHELL

Bağlantıktan sonraki tüm işlemler için, doğru veritabanına geçilmeli ve burada çalışılmalıdır

use apinizerdb
POWERSHELL

Genel komutlar

#Replicaset detaylarını gösterme
rs.status()

#Kullanıcıları gösterme
db.getUsers()

#Mevcut veritabanındaki koleksiyonların isim ve bilgilerini gösterme
db.getCollectionNames()
db.getCollectionInfos()

#Herhangi bir koleksiyonun boyutunu MB olarak görme
db.audit_event.stats().storageSize/1024/1024
POWERSHELL

Arama

db.user.find( { login: "admin" } );

db.db_to_api.find().pretty().limit(10)


#Api Proxy'de full text search 
db.api_proxy.ensureIndex(
    { "$**": "text" },
    { name: "TextIndex" }
);

#Belirli koleksiyonda bir metin araması yapar.
db.api_proxy.find(
	{
	  $text: {
	    $search: "XMLRESULTwithNS"
	  }
	},{
		"name":1
	}
)

 #Kriter ile arama yapma
db.api_proxy.find( {importedUrl: /.*kps.*/ })

#Çoklu kriter ile arama yapma
db.getCollection('api_proxy').find({$and: [{'routing.kpsSettings': { $exists: true }},{importedUrl: /.*kps.*/ }]})

#Regex kullanımı
db.api_proxy.find({ "apiMethodList": { "$elemMatch": { "requestPolicyList": { "$elemMatch": { "name": { "$regex" : /^PolicyJwt3rdAuthentication/i } } } } } });
db.api_proxy.find({ "requestPolicyList": { "$elemMatch": { "name": { "$regex" : /^PolicyJwt3rdAuthentication/i } } } });
db.api_proxy.find({ "requestPolicyList": { "$elemMatch": { "_class": { "$regex" : /.*jwt.*/i } } } } , {"name":1,"requestPolicyList.name":1,"requestPolicyList._class":1});


#Tüm alanlarda arama yapılması
db.api_proxy.find({ $where: function() {
  for (var key in this) {
    if (JSON.stringify(this[key]).indexOf("172.16.1.1") !== -1) {
      return true;
    }
  }
  return false;
}}, {_id: 0,name:1,projectId:1})


#Son 2 saate kadar olan logların sayısını getirir
mongosh mongodb://localhost:25080/apinizerdb --authenticationDatabase "admin" -u "apinizer" -p "password" --eval 'db.apinizer_log.find({"date":{"$lte": new Date((new Date().getTime() - (2 * 60 * 60 * 1000)))}}).count()'
POWERSHELL

Bir Variable'ın hangi Api Proxy'lerdeki hangi Metotlarda kullanıldığını arama

#Fonksiyon çalıştırılmadan önce "use apinizerdb" komutu ile doğru database'e geçilmelidir.

function getApiMethodListObjectsWithFilledRequestPolicyList(nameToCheck) {
    let skipCount = 0;
    const limitCount = 1000;
    console.log("Çıktı formatı: Proxy Adı;Metod Adı;Request/Response Hattı;Politika cinsi.")
    console.log("")
    while (true) {
        const cursor = db.api_proxy.find(
            { "apiMethodList": { $exists: true, $ne: [] } }
        ).skip(skipCount).limit(limitCount);

        if (!cursor.hasNext()) {
            break;
        }
        cursor.forEach(doc => {
            doc.apiMethodList.forEach(object => {
                if (object.requestPolicyList && object.requestPolicyList.length > 0) {
                    object.requestPolicyList.forEach(policy => {
                     if (JSON.stringify(policy).includes(nameToCheck)) {
                            console.log(doc.name + ";" + object.name + ";Request;" + policy._class)
                    }
                    });
                }
                if (object.responsePolicyList && object.responsePolicyList.length > 0) {
                    object.responsePolicyList.forEach(policy => {
                        if (JSON.stringify(policy).includes(nameToCheck)) {
                           console.log(doc.name + ";" + object.name + ";Response;" + policy._class)
                        }
                    });
                }
            });
            if (doc.requestPolicyList && doc.requestPolicyList.length > 0) {
                doc.requestPolicyList.forEach(policy => {
                    if (JSON.stringify(policy).includes(nameToCheck)) {
                        console.log(doc.name + ";ALL;Request;" + policy._class)
                    }
                });
            }
            if (doc.responsePolicyList && doc.responsePolicyList.length > 0) {
                doc.responsePolicyList.forEach(policy => {
                    if (JSON.stringify(policy).includes(nameToCheck)) {
                        console.log(doc.name + ";ALL;Response;" + policy._class)
                    }
                });
            }
        });
        skipCount += limitCount;
    }
  console.log("")
}

getApiMethodListObjectsWithFilledRequestPolicyList("KEYWORDTOSEARCH");
JS

Güncelleme

#Alt elemanın güncellenmesi
db.api_proxy.update( {name :"KYS Yabanci AdSoyad Getir GW"}, {$set: {"routing.connectTimeout": "30"}} );

#Soap-2-Rest cinsindeki bir proxy'deki tüm "unwrapelement" objelerinin değerini true'a çevirme (1 kayıt içinde birden fazla array'de düzenleme yapılırsa sonuç 1 olarak döner)
db.api_proxy.updateMany({relativePath:"/tarServis"},{$set:{"apiMethodList.$[].protocolTransformation.unwrapElement":true}});

#Alt elemana obje eklenmesi (objedeki array'in ikinci objesine ilgili alanı ekler )
db.api_proxy.update( {"relativePath":"/ydsSorgulamaServisi"}, {$push: {"requestPolicyList.1.unPasswordDecrypted": "false"}} );

#admin kullanıcısının şifresini "admin" yapma
db.user.update({"login" : "admin"},{$set: { "password" : "$2a$10$Wv6i9IIdNzlxgDdaf13UdOl7uumVcG7zkSEKaOG4Xqn6IlLuwA13e"}});

#Bir tabloyu kontrol etme ve bir kritere uyan kayıtların değeri değiştirme
db.getCollection('patch_history').find({})
db.patch_history.update({"status" : "RUNNING"},{$set: { "status" : "COMPLETED"}});


db.api_proxy.update( {},
    { 
        "$pull": { 
            "apiProxyDeployList": { 
                "environmentSettingsId": "60e2ad54d5ba7a7636db3aa6" 
            }
        } 
    }, { "multi": true }
);


db.api_proxy.update( {_id : ObjectId("611628a3c21a5c04977e98e2")},
    { 
        "$pull": { 
            "apiProxyDeployList": { 
                "environmentSettingsId": "60e2ad54d5ba7a7636db3aa6" 
            }
        } 
    }, { "multi": true }
);  
POWERSHELL

Silme

#Obje silme (where koşuluna uygun her şeyi siler)
db.privacy_settings.remove({ "salt":"UCPyFvw0EAnOgfOJ"  })

#api_proxy altındaki apiProxyDeployList'i temizleme
//ilk satırdaki where koşulu, tüm doküman üzerinde güncelleme yapılmak istendiği için boş
//ikinci satırdaki where koşulu, apiProxyDeployList'in altındaki her şey silineceği için boş
db.api_proxy.update(
  {  },
  {$pull : {"apiProxyDeployList" : {} }}
)


#Koleksiyondaki tüm kayıtları silme (truncate)
db.db_to_api.remove({})

#Koleksiyonu drop etme
db.db_to_api.drop()

#Koleksiyonu mongoya girmeden drop etme
mongo "mongodb://<IP_ADDRESS>:25080/apinizerdb" --eval 'db.getSiblingDB("admin").auth("apinizer", "PASSWORD"); db.getSiblingDB("apinizerdb").apinizer_log.drop();'

#Veritabanını drop etme
db.dropDatabase()
POWERSHELL

Replicaset İşlemleri

#replicaset'li sistemde replicayı masterdan sync'e zorlama
rs.syncFrom("hostname:port");
POWERSHELL

Yedekleme ve Geri Yükleme

#Yedek alma
sudo mongodump --host <IP_ADDRESS> --port=25080 --username=apinizer --password=<PASSWORD> --authenticationDatabase=admin --gzip --archive=/home/apinizer/apinizer-backup-2023-01-31--1.archive

#Bazı boyutu büyük tabloları hariç tutarak yedek alma
sudo mongodump --host <IP_ADDRESS> --port 25080 --excludeCollection apinizer_log --excludeCollection audit_event -d apinizerdb --authenticationDatabase "admin" -u apinizer -p <PASSWORD> --gzip --archive=/home/apinizer/apinizer-backup-2023-01-31--1.archive

#Yedeği geri yükleme
sudo mongorestore --drop --host <IP_ADDRESS> -port 25080 -u apinizer -p <PASSWORD> --authenticationDatabase=admin --gzip --archive=/home/apinizer/apinizer-backup-2023-01-31--1.archive

#Tek koleksiyonu yedekleme
sudo mongodump --host <IP_ADDRESS> --port=25080 --authenticationDatabase "admin" -d apinizerdb -u apinizer -p <PASSWORD> --collection=<COLLECTION_NAME> --out=/home/apinizer/

#Tek koleksiyonlu yedekten geri yükleme
sudo mongorestore --drop --host <IP_ADDRESS> --port=25080 --authenticationDatabase "admin" -d apinizerdb -u apinizer -p <PASSWORD> --collection=<COLLECTION_NAME> /home/apinizer/apinizerdb/<COLLECTION_NAME>.bson

#Toplu veritabani yedeklerinde gzip ile sıkıştırılma yapılabiliyor, bu durumda aşağıdaki komutu kullanarak düzgün bir archive haline getirip yukarıdaki komutu tekrar çalıştırabilirsiniz.
gunzip < all-dbs-backup-2023-10-5--02.archive > all-dbs-backup-2023-10-5--02

#Toplu veritabani yedeği içerisinden tek bir koleksiyonu geri yükleme
mongorestore --host <IP_ADDRESS> --port 25080 --username apinizer --password  <PASSWORD> --authenticationDatabase admin --drop --nsInclude 'apinizer-dev.environment_settings' --archive=all-dbs-backup-2023-10-5--02
POWERSHELL

Loglar

#Uygulama logları
sudo tail -999f /var/log/mongodb/mongod.log
POWERSHELL

Apinizer'da API Proxy Yeniden Oluşturma ve Elasticsearch Loglarına Ulaşma

Bu komutlar, bir API Proxy silindiğinde ve yeniden oluşturulduğunda ya da export/import işlemleri yapıldığında Elasticsearch loglarına aynı API Proxy üzerinden erişimi sağlamak için kullanılır.

# Proxy belgesini bir değişkende sakla
doc = db.api_proxy.findOne({_id: ObjectId("YANLISPROXYID")})

# Yeni bir _id ayarla
doc._id = ObjectId("OLMASIGEREKENPROXYID")

# Yeni _id ile belgeyi ekle
db.api_proxy.insert(doc)

# Eski _id ile olan belgeyi sil
db.api_proxy.remove({_id: ObjectId("YANLISPROXYID")})

# Apinizer için gerekli güncelleme
db.api_proxy_revision.update({apiProxyId:"YANLISPROXYID"}, {$set: { apiProxyId:"OLMASIGEREKENPROXYID"}})

# Yetkilerin güncellenmesi
db.credential_allowed_api_proxy.updateMany({apiProxyId:"YANLISPROXYID"}, {$set: { apiProxyId:"OLMASIGEREKENPROXYID"}})
POWERSHELL