Node.js е популярна платформа за изпълнение за създаване на програми, които работят върху нея.

Позволява ни да стартираме JavaScript извън браузъра.

В тази статия ще разгледаме как да започнете да използвате Node.js за създаване на програми.

Мониторинг с MongoDB

Можем да наблюдаваме дейностите на MongoDB, като слушаме събитията, които излъчва.

Например, можем да напишем:

const { MongoClient } = require('mongodb');
const connection = "mongodb://localhost:27017";
const client = new MongoClient(connection);
const eventName = "serverDescriptionChanged";
client.on(eventName, event => {
  console.log(`received ${eventName}: ${JSON.stringify(event, null, 2)}`);
});
async function run() {
  try {
    await client.connect();
    const db = client.db("test");
    db.dropCollection('test');
    const testCollection = await db.collection('test');
    const result = await testCollection.insertMany([
      { "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
      { "_id": 2, "name": "apples", "qty": 7, "rating": 1 },
      { "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
      { "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
    ]);
    console.log(result)
    const cursor = await testCollection.find();
    cursor.forEach(console.dir);
  } finally {
    await client.close();
  }
}
run().catch(console.dir);

за да следите за serverDescriptionChanged събития и да регистрирате данните за събитието.

Тогава получаваме нещо като:

received serverDescriptionChanged: {
  "address": "localhost:27017",
  "previousDescription": {
    "address": "localhost:27017",
    "arbiters": [],
    "hosts": [],
    "passives": [],
    "type": "Unknown"
  },
  "newDescription": {
    "address": "localhost:27017",
    "arbiters": [],
    "hosts": [],
    "passives": [],
    "type": "Standalone"
  }
}

влезли в конзолата.

Други събития включват:

  • serverOpening — Излъчва се, когато се отвори връзка с екземпляр.
  • serverClosed — Излъчва се при затваряне на връзка с екземпляр.
  • serverDescriptionChanged — Излъчва се при промяна на състоянието на екземпляр
  • topologyOpening — Излъчва се преди опит за свързване към екземпляр.topologyClosed — Излъчва се след затваряне на всички връзки на екземпляр в топологията.
  • topologyDescriptionChanged — Излъчва се при промяна на топологията, като избор на нов основен или прекъсване на връзката с mongos прокси.
  • serverHeartbeatStarted — Излъчено преди подаване на команда isMaster към екземпляр на MongoDB.
  • serverHeartbeatSucceeded — Излъчва се, когато командата isMaster се върне успешно от екземпляр на MongoDB.
  • serverHeartbeatFailed — Създава се, когато команда isMaster, издадена на конкретен екземпляр на MongoDB, не успее да върне успешен отговор

Полето type на обекта ServerDescription е събитието, което има една от следните стойности:

  • Unknown — Неизвестен случай
  • Standalone — Самостоятелен екземплярMongosMongos прокси екземпляр
  • PossiblePrimary — Поне един сървър разпознава това като основен, но все още не е проверен от всички инстанции.
  • RSPrimary — Първичен екземпляр
  • RSSecondary — Вторичен екземпляр
  • RSArbiter — Екземпляр на арбитър
  • RSOther
  • RSGhost

Събитието topologyDescriptionChanged има поле type в обекта TopologyDescription, което може да бъде една от следните стойности:

  • Single — Самостоятелен екземпляр
  • ReplicaSetWithPrimary — Комплект реплики с основен
  • ReplicaSetNoPrimary — Комплект реплики без основен
  • Sharded — Разделен клъстер
  • Unknown — Неизвестна топология

Заключение

Можем да наблюдаваме събития с клиента MongoDB Node.js, за да извършваме мониторинг.