Vlož své logy.

Vytvořeno pro Minecraft a Hytale

API Dokumentace

Integrujte MC Návody přímo do svého server panelu, hostingového softwaru nebo čehokoliv jiného. Tato platforma byla vytvořena pro vysoce výkonnou automatizaci a lze ji snadno integrovat do jakéhokoli existujícího softwaru prostřednictvím našeho HTTP API.

Rychlé odkazy

Vytvořit log

POST https://api.mcnavody.eu/1/log application/json
Odesílání obsahu s typem application/x-www-form-urlencoded je stále podporováno z důvodu zpětné kompatibility, ale nepodporuje nastavení metadat.
Pole Povinné Typ Popis
content string Hrubý obsah souboru logu jako řetězec. Omezeno na 10.00 MiB a 25,000 řádků. Pokud to bude nutné, obsah bude zkrácen, ale doporučuje se zkracování provádět na straně klienta.
source string Název zdroje, např. doména nebo název softwaru.
metadata array Pole položek metadat.

Příklad těla požadavku application/json

{
    "content": "[obsah log souboru...]",
    "source": "example.org"
}

Metadata

Společně s obsahem logu můžete odeslat metadata, která se zobrazí na stránce logu a/nebo budou čitelná pro jiné aplikace prostřednictvím tohoto API. To je zcela volitelné, ale může to pomoci poskytnout další kontext, např. interní ID serveru, verze softwaru atd.

Položka metadat je objekt s následujícími poli:

Pole Povinné Typ Popis
key string Klíč metadat. Lze použít k pozdější identifikaci položky ve vašem kódu.
value string|int|float|bool|null Hodnota metadat.
label string Zobrazovaný popisek. Pokud není uveden, použije se jako popisek klíč.
visible bool Zda mají být tato metadata viditelná na stránce logu, nebo dostupná pouze přes API. Výchozí je true.

Příklad těla s metadaty application/json

{
    "content": "[obsah log souboru...]",
    "source": "example.org",
    "metadata": [
        {
            "key": "server_id",
            "value": 12345,
            "visible": false
        },
        {
            "key": "software_version",
            "value": "1.2.3",
            "label": "Verze Softwaru",
            "visible": true
        }
    ]
}

Odpovědi

Úspěch application/json

Token poskytnutý v této odpovědi lze později použít ke smazání tohoto logu. Uložte jej bezpečně nebo jej zahoďte, znovu se již nezobrazí.
{
    "success":true,
    "id":"WnMMikq",
    "source":null,
    "created":1769597979,
    "expires":1777373979,
    "size":157369,
    "lines":1201,
    "errors":8,
    "url": "https://log.mcnavody.eu/WnMMikq",
    "raw": "https://api.mcnavody.eu/1/raw/WnMMikq",
    "token":"78351fafe495398163fff847f9a26dda440435dcf7b5f92e8e36308f3683d771",
    "metadata": [
        {
            "key": "server_id",
            "value": 12345,
            "visible": false
        },
        {
            "key": "software_version",
            "value": "1.2.3",
            "label": "Verze Softwaru",
            "visible": true
        }
    ]
}

Chyba application/json

{
    "success": false,
    "error": "Required field 'content' not found."
}

Získat informace a obsah logu

GET https://api.mcnavody.eu/1/log/[id]

Tento koncový bod (endpoint) ve výchozím nastavení vrací pouze informace o logu a metadata (stejná odpověď jako při vytvoření logu). V rámci stejného požadavku můžete získat i obsah v různých formátech povolením příslušných GET parametrů. Můžete kombinovat více parametrů a získat tak více formátů obsahu najednou, mějte ale na paměti, že to zvětší velikost odpovědi.

GET Parametr Pole v odpovědi Popis
raw content.raw Zahrne do odpovědi hrubý obsah logu jako řetězec.
parsed content.parsed Zahrne do odpovědi zpracovaný obsah logu jako pole/objekty.
insights content.insights Zahrne do odpovědi automaticky detekovanou analýzu (problémy/informace).

Odpovědi

Úspěch application/json

Všechna pole obsahu jsou zahrnuta pouze v případě, že je zadán odpovídající parametr GET. Pokud není zadán žádný parametr obsahu, celý objekt obsahu je z odpovědi vynechán.
{
    "success":true,
    "id":"WnMMikq",
    "source":null,
    "created":1769597979,
    "expires":1777373979,
    "size":157369,
    "lines":1201,
    "errors":8,
    "url": "https://log.mcnavody.eu/WnMMikq",
    "raw": "https://api.mcnavody.eu/1/raw/WnMMikq",
    "metadata": [
        {
            "key": "server_id",
            "value": 12345,
            "visible": false
        },
        {
            "key": "software_version",
            "value": "1.2.3",
            "label": "Verze Softwaru",
            "visible": true
        }
    ],
    "content": {
        "raw": "[obsah log souboru...]",
        "parsed": [ /* zpracované položky logu */ ],
        "insights": { "problems": [ /* detekované problémy */ ], "information": [ /* detekované informace */ ] }
    }
}

Chyba application/json

{
    "success": false,
    "error": "Log not found."
}

Smazat log

Smazání logu vyžaduje token, který byl poskytnut při jeho vytvoření.
DELETE https://api.mcnavody.eu/1/log/[id]

Hlavičky (Headers)

Hlavička Příklad Popis
Authorization Authorization: Bearer 78351fafe495398163f... Typ (vždy "Bearer") a token logu obdržený při jeho vytvoření.

Odpovědi

Úspěch application/json

{
    "success": true
}

Chyba application/json

{
    "success": false,
    "error": "Invalid token."
}

Hromadně smazat více logů

Tato metoda umožňuje smazat až 256 logů najednou. Smazání logů vyžaduje tokeny, které byly poskytnuty při jejich vytvoření.
POST https://api.mcnavody.eu/1/bulk/log/delete

Příklad těla požadavku application/json

[
    {
        "id": "6wexMDE",
        "token": "78351fafe495398163fff847f9a26dda440435dcf7b5f92e8e36308f3683d771"
    },
    {
        "id": "OahzhMG",
        "token": "6520dd42ec3d5fd0e83f28220974fb83d3bdc0746853f5022373f8e5b062651b"
    }
]

Odpovědi

Úspěch application/json

Požadavek na hromadné smazání vrátí úspěšný výsledek a stavový kód 207, což znamená, že požadavek byl zpracován. Výsledky jednotlivých operací jsou zahrnuty v těle odpovědi.
{
    "success": true,
    "results": [
        {
            "success": true,
            "id": "6wexMDE",
            "status": 200
        },
        {
            "success": true,
            "id": "OahzhMG",
            "status": 200
        }
    ]
}

Částečný úspěch application/json

Pokud je požadavek na hromadné smazání platný, ale nelze smazat všechny logy (např. kvůli neplatným tokenům nebo neexistujícím logům), bude celkově stále považován za úspěšný, ale tělo odpovědi bude obsahovat chybové výsledky pro logy, které se nepodařilo smazat.
{
    "success": true,
    "results": [
        {
            "success": true,
            "id": "6wexMDE",
            "status": 200
        },
        {
            "success": false,
            "error": "Log not found.",
            "id": "OahzhMG",
            "status": 404
        }
    ]
}

Chyba application/json

Pokud je požadavek na hromadné smazání nesprávně naformátován nebo je neplatný, celý požadavek bude zamítnut s chybovou odpovědí a žádné logy nebudou smazány.
{
    "success": false,
    "error": "No logs provided."
}

Získat hrubý obsah logu

Tento koncový bod použijte pouze v případě, že opravdu potřebujete jen hrubý obsah logu. Pro většinu případů se doporučuje získat informace a obsah společně z endpointu pro log.
GET https://api.mcnavody.eu/1/raw/[id]
Pole Typ Popis
[id] string ID log souboru, získané z endpointu pro vložení nebo z URL (https://log.mcnavody.eu/[id]).

Úspěch text/plain

[18:25:33] [Server thread/INFO]: Starting minecraft server version 1.16.2
[18:25:33] [Server thread/INFO]: Loading properties
[18:25:34] [Server thread/INFO]: Default game type: SURVIVAL
...

Chyba application/json

{
    "success": false,
    "error": "Log not found."
}

Získat analýzu (Insights)

Tento koncový bod je ponechán hlavně kvůli zpětné kompatibilitě. U nových aplikací se doporučuje získávat analýzu společně s informacemi o logu z hlavního endpointu.
GET https://api.mcnavody.eu/1/insights/[id]
Pole Typ Popis
[id] string ID log souboru, získané z endpointu pro vložení nebo z URL (https://log.mcnavody.eu/[id]).

Úspěch application/json

{
  "id": "name/type",
  "name": "Název softwaru, např. Vanilla",
  "type": "Název typu, např. Server Log",
  "version": "Verze, např. 1.12.2",
  "title": "Kombinovaný název, např. Vanilla 1.12.2 Server Log",
  "analysis": {
    "problems": [
      {
        "message": "Zpráva vysvětlující problém.",
        "counter": 1,
        "entry": {
          "level": 6,
          "time": null,
          "prefix": "Prefix tohoto záznamu, obvykle část obsahující čas a úroveň logu.",
          "lines": [
            {
              "number": 1,
              "content": "Celý obsah řádku."
            }
          ]
        },
        "solutions": [
          {
            "message": "Zpráva vysvětlující možné řešení."
          }
        ]
      }
    ],
    "information": [
      {
        "message": "Popisek: hodnota",
        "counter": 1,
        "label": "Popisek této informace, např. Verze Minecraftu",
        "value": "Hodnota této informace, např. 1.12.2",
        "entry": {
          "level": 6,
          "time": null,
          "prefix": "Prefix tohoto záznamu, obvykle část obsahující čas a úroveň logu.",
          "lines": [
            {
              "number": 6,
              "content": "Celý obsah řádku."
            }
          ]
        }
      }
    ]
  }
}

Chyba application/json

{
    "success": false,
    "error": "Log not found."
}

Analyzovat log bez uložení

Pokud chcete využít pouze funkce analýzy této služby bez uložení logu, můžete použít tento koncový bod. Prosím, neukládejte logy, které chcete pouze analyzovat, protože to plýtvá úložným prostorem a zdroji.

POST https://api.mcnavody.eu/1/analyse application/x-www-form-urlencoded application/json
Pole Typ Popis
content string Hrubý obsah souboru logu jako řetězec. Maximální délka je 10MiB a 25 tisíc řádků, v případě potřeby bude zkrácen.

Úspěch application/json

{
  "id": "name/type",
  "name": "Název softwaru, např. Vanilla",
  "type": "Název typu, např. Server Log",
  "version": "Verze, např. 1.12.2",
  "title": "Kombinovaný název, např. Vanilla 1.12.2 Server Log",
  "analysis": {
    "problems": [
      {
        "message": "Zpráva vysvětlující problém.",
        "counter": 1,
        "entry": {
          "level": 6,
          "time": null,
          "prefix": "Prefix tohoto záznamu, obvykle část obsahující čas a úroveň logu.",
          "lines": [
            {
              "number": 1,
              "content": "Celý obsah řádku."
            }
          ]
        },
        "solutions": [
          {
            "message": "Zpráva vysvětlující možné řešení."
          }
        ]
      }
    ],
    "information": [
      {
        "message": "Popisek: hodnota",
        "counter": 1,
        "label": "Popisek této informace, např. Verze Minecraftu",
        "value": "Hodnota této informace, např. 1.12.2",
        "entry": {
          "level": 6,
          "time": null,
          "prefix": "Prefix tohoto záznamu, obvykle část obsahující čas a úroveň logu.",
          "lines": [
            {
              "number": 6,
              "content": "Celý obsah řádku."
            }
          ]
        }
      }
    ]
  }
}

Chyba application/json

{
    "success": false,
    "error": "Required field 'content' is empty."
}

Zkontrolovat limity úložiště

GET https://api.mcnavody.eu/1/limits

Úspěch application/json

{
  "storageTime": 7776000,
  "maxLength": 10485760,
  "maxLines": 25000
}
Pole Typ Popis
storageTime integer Doba v sekundách, po kterou je log uložen od posledního zobrazení.
maxLength integer Maximální délka souboru v bajtech. Logy přesahující tento limit budou zkráceny.
maxLines integer Maximální počet řádků. Řádky navíc budou odstraněny.

Získat filtry

Filtry upravují obsah logu před jeho uložením. Aplikují se automaticky při vytváření nového logu na straně serveru. Z tohoto koncového bodu můžete získat seznam aktivních filtrů, pokud chcete aplikovat stejné filtry na straně klienta před odesláním logu.

GET https://api.mcnavody.eu/1/filters

Úspěch application/json

[
    {
        "type": "trim",
        "data": {}
    },
    {
        "type": "limit-bytes",
        "data": {
            "limit": 10485760
        }
    },
    {
        "type": "limit-lines",
        "data": {
            "limit": 25000
        }
    },
    {
        "type": "regex",
        "data": {
            "patterns": [
                {
                    "pattern": "(?<!version:? )(?<!([0-9]|-|\\w))([0-9]{1,3}\\.){3}[0-9]{1,3}(?![0-9])",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "**.**.**.**"
                }
            ],
            "exemptions": [
                {
                    "pattern": "^127\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$",
                    "modifiers": [
                        "i"
                    ]
                },
                {
                    "pattern": "^0\\.0\\.0\\.0$",
                    "modifiers": [
                        "i"
                    ]
                },
                {
                    "pattern": "^1\\.[01]\\.[01]\\.1$",
                    "modifiers": [
                        "i"
                    ]
                },
                {
                    "pattern": "^8\\.8\\.[84]\\.[84]$",
                    "modifiers": [
                        "i"
                    ]
                }
            ]
        }
    },
    {
        "type": "regex",
        "data": {
            "patterns": [
                {
                    "pattern": "(?<=^|\\W)((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?(?=$|\\W)",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "****:****:****:****:****:****:****:****"
                }
            ],
            "exemptions": [
                {
                    "pattern": "^[0:]+1?$",
                    "modifiers": [
                        "i"
                    ]
                }
            ]
        }
    },
    {
        "type": "regex",
        "data": {
            "patterns": [
                {
                    "pattern": "C:\\\\Users\\\\([^\\\\]+)\\\\",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "C:\\Users\\********\\"
                },
                {
                    "pattern": "C:\\\\\\\\Users\\\\\\\\([^\\\\]+)\\\\\\\\",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "C:\\\\Users\\\\********\\\\"
                },
                {
                    "pattern": "C:\\\/Users\\\/([^\\\/]+)\\\/",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "C:\/Users\/********\/"
                },
                {
                    "pattern": "(?<!\\w)\\\/home\\\/[^\\\/]+\\\/",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "\/home\/********\/"
                },
                {
                    "pattern": "(?<!\\w)\\\/Users\\\/[^\\\/]+\\\/",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "\/Users\/********\/"
                },
                {
                    "pattern": "USERNAME=\\w+",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "USERNAME=********"
                }
            ],
            "exemptions": []
        }
    },
    {
        "type": "regex",
        "data": {
            "patterns": [
                {
                    "pattern": "\\(Session ID is token:[^:]+\\:[^)]+\\)",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "(Session ID is token:****************:****************)"
                },
                {
                    "pattern": "--accessToken [^ ]+",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "--accessToken ****************:****************"
                },
                {
                    "pattern": "\"authToken\":\"[^\"]+\"",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "\"authToken\":\"****************\""
                },
                {
                    "pattern": "\"refreshToken\":\"[^\"]+\"",
                    "modifiers": [
                        "i"
                    ],
                    "replacement": "\"refreshToken\":\"****************\""
                }
            ],
            "exemptions": []
        }
    }
]

Typy filtrů

Typ Popis
trim Odstraní bílé znaky ze začátku a konce obsahu logu.
limit-bytes Omezí obsah logu na maximální počet bajtů (data.limit). Obsah přesahující tento limit bude zkrácen.
limit-lines Omezí obsah logu na maximální počet řádků (data.limit). Řádky navíc budou odstraněny.
regex Aplikuje nahrazení regulárních výrazů na obsah logu. Každý vzor v data.patterns bude aplikován v pořadí a nahrazen poskytnutou náhradou, pokud shodný řetězec neodpovídá jednomu z výjimek v data.exemptions.
Ujistěte se, že chyby filtrů (např. neznámé typy filtrů) zpracováváte elegantně, protože v budoucnu mohou být přidány nové typy filtrů.