Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse
Brand Logo

NetXMS Forum

  1. Home
  2. Support (Russian)
  3. Ложное срабатывание на SYS_PACKAGE_UPDATE

Ложное срабатывание на SYS_PACKAGE_UPDATE

Scheduled Pinned Locked Moved Support (Russian)
1 Posts 1 Posters 3.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I
    I
    IFriendly
    wrote on last edited by
    #1

    Добрый день!

    Обнаружил ложное срабатывание при опросе конфигурации через агента (2.2.2, Linux Centos 7)
    Решил проблему NXSL-фильтром на обработчике событий.

    Но ситуация в принципе не корректная.

    Причина в следующем.

    Опрос ПО и установленных пакетов идет через агента по System.InstalledProducts событию и в хендлере H_InstalledProducts()
    ...
            command = "/bin/rpm -qa --queryformat '@@@ #%{NAME}:%{ARCH}|%{VERSION}|%{VENDOR}|%{INSTALLTIME}|%{URL}|%{SUMMARY}\\n'";
    ...

    Интересующая часть результата опроса:
    ....
    @@@ #gpg-pubkey:(none)|f4a80eb5|(none)|1512394964|(none)|gpg(CentOS-7 Key (CentOS 7 Official Signing Key) [email protected])
    @@@ #gpg-pubkey:(none)|352c64e5|(none)|1512410575|(none)|gpg(Fedora EPEL (7) [email protected])
    @@@ #gpg-pubkey:(none)|442df0f8|(none)|1512403038|(none)|gpg(PostgreSQL RPM Building Project [email protected])
    .....

    Обработка полученного результата идет на сервере в Node::updateSoftwarePackages()
    ...
    SoftwarePackage *pkg = SoftwarePackage::createFromTableRow(table, i);
    packages->add(pkg);
    ...
    packages->sort(PackageNameComparator);

    Компаратор производит сравнение по имени пакета, но имена из примера выше одинаковые.

    static int PackageNameComparator(const SoftwarePackage *p1, const SoftwarePackage *p2)
    {
      return _tcscmp((*p1)->getName(), (*p2)->getName());
    }

    В таких случаях хорошо бы сравнивать еще и по описанию, но метода для доступа к приватному полю в классе SoftwarePackage нет:

    class SoftwarePackage{
    ...
    public:
        ~SoftwarePackage();

        void fillMessage(NXCPMessage *msg, UINT32 baseId) const;
        const TCHAR *getName() const { return m_name; }
        const TCHAR *getVersion() const { return m_version; }

        static SoftwarePackage createFromTableRow(const Table table, int row);
    };

    Ложное срабатывание происходит при поиске:
            SoftwarePackage *p = m_softwarePackages->get(i);
            SoftwarePackage np = (SoftwarePackage )packages->find(p, PackageNameComparator);

    т.к. будет найден первый из имеющихся опрошенных пакетов при поиске по одинаковому ключу.

    Решение:

    1. Добавить методы в класс SoftwarePackage для доступа к описанию пакета.
    2. В случае одинаковых имен пакетов в компараторе провести сравнение по описанию.

    Также можно расширить запрос rpm на один столбец: %{Packager} и сравнивать не по описанию, а по %{Packager}-у, при этом необходимо будет расширить таблицу с сохраненными параметрами пакетов (аналогично и для deb-пакетов).

    1 Reply Last reply
    0

    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

    With your input, this post could be even better 💗

    Register Login
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    • Login

    • Don't have an account? Register

    • Login or register to search.
    Powered by NodeBB Contributors
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups