{
    "id": "mysql148-nd-userland-observer",
    "title": "Вызвать PHP-наблюдателя из C и не испортить каталог",
    "columns": [
        "Наблюдение",
        "Результат"
    ],
    "rows": [
        [
            "Доступные товары",
            "BOX, LED"
        ],
        [
            "Товаров без остатка",
            1
        ],
        [
            "Вызовов первого наблюдателя",
            1
        ],
        [
            "Повторных callback пропущено",
            1
        ],
        [
            "Ошибок необязательного наблюдателя",
            1
        ],
        [
            "Каталог после его ошибки",
            "BOX"
        ]
    ],
    "checks": {
        "catalog_preserved": true,
        "watch_result_read": true,
        "reentrancy_bounded": true,
        "observer_error_isolated": true,
        "owned_objects_removed": true
    },
    "observations": {
        "catalog": [
            {
                "sku": "BOX",
                "stock": "5"
            },
            {
                "sku": "LED",
                "stock": "12"
            }
        ],
        "events": [
            {
                "kind": "query",
                "ok": true,
                "connection_id": 1
            }
        ],
        "alerts": [
            {
                "sold_out": "1"
            }
        ],
        "after_watch": {
            "extension_version": "0.1.0",
            "query_attempts": 2,
            "query_failed": 0,
            "stmt_attempts": 0,
            "stmt_failed": 0,
            "tracked_connections": 2,
            "closed_connections": 0,
            "dropped_connections": 0,
            "observer_calls": 1,
            "observer_errors": 0,
            "observer_reentrant_skips": 1,
            "connections": [
                {
                    "id": 1,
                    "query_attempts": 1,
                    "query_failed": 0,
                    "stmt_attempts": 0,
                    "stmt_failed": 0,
                    "closed": false
                },
                {
                    "id": 2,
                    "query_attempts": 1,
                    "query_failed": 0,
                    "stmt_attempts": 0,
                    "stmt_failed": 0,
                    "closed": false
                }
            ]
        },
        "after_observer_error": {
            "sku": "BOX"
        },
        "snapshot": {
            "extension_version": "0.1.0",
            "query_attempts": 3,
            "query_failed": 0,
            "stmt_attempts": 0,
            "stmt_failed": 0,
            "tracked_connections": 2,
            "closed_connections": 0,
            "dropped_connections": 0,
            "observer_calls": 2,
            "observer_errors": 1,
            "observer_reentrant_skips": 1,
            "connections": [
                {
                    "id": 1,
                    "query_attempts": 2,
                    "query_failed": 0,
                    "stmt_attempts": 0,
                    "stmt_failed": 0,
                    "closed": false
                },
                {
                    "id": 2,
                    "query_attempts": 1,
                    "query_failed": 0,
                    "stmt_attempts": 0,
                    "stmt_failed": 0,
                    "closed": false
                }
            ]
        }
    },
    "runtime": {
        "php": "8.3.6",
        "mysqlnd": "mysqlnd 8.3.6",
        "plugin": "0.1.0",
        "server_version": 80046,
        "schema": "phpmanual148",
        "socket": "\/opt\/phpmanual-mysql148\/run\/mysql.sock",
        "networking": "unix_socket_only"
    },
    "owned_objects": [
        {
            "type": "TABLE",
            "name": "mysql148_catalog_bdd4a5e0da78"
        }
    ],
    "removed_objects": [
        {
            "type": "TABLE",
            "name": "mysql148_catalog_bdd4a5e0da78"
        }
    ]
}
