[comment]: # attributes: notoc

[comment]: # (terms: fmtnum, fmttime, iregsub, regsub)

[comment]: # ({b219ec06-0458cee0})
# 1 Makro funkcijas

#### Pārskats

Makro funkcijas nodrošina iespēju pielāgot [makro](/manual/config/macros) vērtības (piemēram, saīsināt vai izvilkt noteiktas apakšvirknes), padarot tās ērtāk lietojamas.

Makro funkcijas sintakse ir:

```default
{macro.func(params)}
```

kur

-   **macro** - pielāgojamais makro;
-   **func** - lietojamā funkcija (skatiet [atbalstītās funkcijas](#supported-functions));
-   **params** - ar komatiem atdalīts funkcijas parametru saraksts, kam jābūt **iekļautam dubultpēdiņās**, ja:
    -   sākas ar atstarpi vai dubultpēdiņām;
    -   satur aizverošās iekavas vai komatu.

Piemēram:

```default
{{TIME}.fmttime(format,time_shift)}
{{ITEM.VALUE}.regsub(pattern, output)}
{{$USERMACRO}.regsub(pattern, output)}
{{#LLDMACRO}.regsub(pattern, output)}
```

Makro funkcijas tiek atbalstītas šādiem elementiem:

-   [Iebūvētie makro](/manual/appendix/macros/supported_by_location)
-   [Lietotāja makro](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [Zema līmeņa atklāšanas makro](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [Izteiksmes makro](/manual/appendix/macros/supported_by_location#other-macro-types)

Makro funkcijas var izmantot visās vietās, kur tiek atbalstīti uzskaitītie makro.
Tas attiecas uz gadījumiem, ja nav skaidri norādīts, ka tiek gaidīts tikai makro (piemēram, konfigurējot [hosts makro](/manual/config/hosts/host#configuration) vai zema līmeņa atklāšanas noteikuma [filtrus](/manual/discovery/low_level_discovery#filter)).

Skatiet arī: [zināmās problēmas](/manual/installation/known_issues#macro-functions).

Vienam makro tiek atbalstīta tikai viena funkcija; vairāku makro funkciju ķēdēšana netiek atbalstīta.

:::noteclassic
Lūdzu, skatiet [atdalīšanas piemērus](/manual/appendix/escaping) gadījumiem, kad makro funkcijas tiek izmantotas citos kontekstos (funkcijā, vienuma atslēgā, citā makro utt.).
:::

[comment]: # ({/b219ec06-0458cee0})

[comment]: # ({49d5aaf8-f23fb953})
#### Atbalstītās funkcijas

Funkcijas ir uzskaitītas bez papildu informācijas.
Noklikšķiniet uz funkcijas, lai skatītu pilnu informāciju.

|Function|Description|
|--|--------|
|[btoa](#btoa)|Makro vērtības kodēšana Base64 formātā.|
|[fmtnum](#fmtnum)|Skaitļu formatēšana, lai kontrolētu ciparu skaitu aiz decimāldaļas punkta.|
|[fmttime](#fmttime)|Laika formatēšana.|
|[htmldecode](#htmldecode)|Makro vērtības dekodēšana no HTML kodējuma.|
|[htmlencode](#htmlencode)|Makro vērtības kodēšana HTML kodējumā.|
|[iregsub](#iregsub)|Apakšvirknes iegūšana, izmantojot regulārās izteiksmes atbilstību (nav reģistrjutīgs).|
|[lowercase](#lowercase)|Makro vērtības rakstzīmju pārveidošana uz mazajiem burtiem.|
|[regrepl](#regrepl)|Rakstzīmes/apakšvirknes aizstāšana makro vērtībā.|
|[regsub](#regsub)|Apakšvirknes iegūšana, izmantojot regulārās izteiksmes atbilstību (reģistrjutīgs).|
|[tr](#tr)|Makro vērtības rakstzīmju transliterācija.|
|[uppercase](#uppercase)|Makro vērtības rakstzīmju pārveidošana uz lielajiem burtiem.|
|[urldecode](#urldecode)|Makro vērtības dekodēšana no URL kodējuma.|
|[urlencode](#urlencode)|Makro vērtības kodēšana URL kodējumā.|

[comment]: # ({/49d5aaf8-f23fb953})

[comment]: # ({91058888-c1632a9e})
#### Funkcijas informācija

Neobligātie funkcijas parametri ir norādīti ar < >.

[comment]: # ({/91058888-c1632a9e})

[comment]: # ({d82603b4-26fb165d})
##### btoa {#btoa}

Makro vērtības kodēšana Base64 kodējumā.
Base64 kodējums ir metode bināro datu attēlošanai kā tekstu, kas ir noderīga binārā satura glabāšanai un drošai pārsūtīšanai, izmantojot uz tekstu balstītus protokolus.

Piemērs:

```default
{{ITEM.VALUE}.btoa()} - kodēs tādu vērtību kā "zabbix" Base64 formātā "emFiYml4"
```

Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

[comment]: # ({/d82603b4-26fb165d})

[comment]: # ({31245134-4df3fd19})
##### fmtnum(digits) {#fmtnum}

Skaitļa formatēšana, lai kontrolētu pēc decimālpunkta izdrukāto ciparu skaitu.

Parametri:

-   **digits** - ciparu skaits aiz decimālpunkta.
Derīgais diapazons: 0-20.
Beigu nulles netiks pievienotas.

Piemēri:

```default
{{ITEM.VALUE}.fmtnum(2)} - atgriezīs "24.35" no saņemtās vērtības "24.3483523"
{{ITEM.VALUE}.fmtnum(0)} - atgriezīs "24" no saņemtās vērtības "24.3483523"
```

[comment]: # ({/31245134-4df3fd19})

[comment]: # ({1bcbff41-3caa4dc7})
##### fmttime(format,<time\_shift>) {#fmttime}

Laika formatēšana.<br>
Ņemiet vērā, ka šo funkciju var izmantot ar makro, kas tiek atrisināti uz vērtību vienā no šiem laika formātiem:

-   `hh:mm:ss`
-   `yyyy-mm-ddThh:mm:ss[tz]` (ISO8601 standarts)
-   UNIX laikspiedols

Parametri:

-   **format** - obligāta formāta virkne, kas ir saderīga ar `strftime` funkcijas formatējumu;<br>
-   **time\_shift** (neobligāts) - laika nobīde, kas tiek piemērota laikam pirms formatēšanas; tai jāsākas ar `-<N><time_unit>` vai `+<N><time_unit>`, kur:<br>
    -   `N` - laika vienību skaits, ko pievienot vai atņemt;
    -   `time_unit` - h (stunda), d (diena), w (nedēļa), M (mēnesis) vai y (gads).

Komentāri:

-   `time_shift` parametrs atbalsta vairāku soļu laika darbības un var ietvert `/<time_unit>` laika vienības sākuma noteikšanai
    (`/d` - pusnakts, `/w` - nedēļas 1. diena (pirmdiena), `/M` - mēneša 1. diena utt.).
    Piemēri: `-1w` - tieši 7 dienas atpakaļ; `-1w/w` - iepriekšējās nedēļas pirmdiena; `-1w/w+1d` - iepriekšējās nedēļas otrdiena.
-   Laika darbības tiek aprēķinātas no kreisās uz labo pusi bez prioritātēm.
Piemēram, `-1M/d+1h/w` tiks interpretēts kā `((-1M/d)+1h)/w`.

Piemēri:

```default
{{TIMESTAMP}.fmttime(%B)} - atgriezīs "October" no saņemtās vērtības "1633098961"
{{TIMESTAMP}.fmttime(%d %B,-1M/M)} - atgriezīs "1 September" no saņemtās vērtības "1633098961"
```

[comment]: # ({/1bcbff41-3caa4dc7})

[comment]: # ({26e2caaa-6f65f316})
##### htmldecode {#htmldecode}

Makro vērtības atkodēšana no HTML kodējuma.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Tiek atbalstītas šādas rakstzīmes:

|Value|Decoded value|
|----|------|
|`&amp;`|`&`|
|`&lt;`|`<`|
|`&gt;`|`>`|
|`&quot;`|`"`|
|`&#039;`|`'`|
|`&#39;`|`'`|

Piemērs:

```default
{{ITEM.VALUE}.htmldecode()} - atkodēs HTML vērtību, piemēram, "&lt;" uz "<"
```

[comment]: # ({/26e2caaa-6f65f316})

[comment]: # ({f282eb66-c4adc457})
##### htmlencode {#htmlencode}

Makro vērtības kodēšana HTML kodējumā.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Tiek atbalstītas šādas rakstzīmes:

|Value|Encoded value|
|----|------|
|`&`|`&amp;`|
|`<`|`&lt;`|
|`>`|`&gt;`|
|`"`|`&quot;`|
|`'`|`&#39;`|

Piemērs:

```default
{{ITEM.VALUE}.htmlencode()} - HTML kodēs rakstzīmi, piemēram, "<" uz "&lt;"
```

[comment]: # ({/f282eb66-c4adc457})

[comment]: # ({edaa6df7-e78b5abd})
##### iregsub(pattern,output) {#iregsub}

Apakšvirknes izvilkšana pēc atbilstības regulārajai izteiksmei (bez reģistra jutības).

Parametri:

-   **pattern** - regulārā izteiksme atbilstības noteikšanai;
-   **output** - izvades opcijas.
**\\1 - \\9** vietturi tiek atbalstīti tveršanas grupām.
**\\0** atgriež atbilstošo tekstu.

Komentāri:

-   Ja regulārajai izteiksmei nav atbilstības, funkcija atgriež tukšu virkni.
-   Ja funkcijas pattern ir nekorekta regulārā izteiksme, tad makro tiek novērtēts kā 'UNKNOWN' (izņemot zema līmeņa atklāšanas makro, kurā gadījumā funkcija tiks ignorēta un makro paliks neatrisināts).
-   Atsauces uz neeksistējošām tveršanas grupām aizvietošanas virknē tiek aizstātas ar tukšu virkni.

Piemērs:

```default
{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - tiks atrisināts kā "ERROR", ja tiks saņemtas apakšvirknes "fail", "error", "fault" vai "problem" (bez reģistra jutības); atgriezīs tukšu virkni, ja nebūs atbilstības
```

[comment]: # ({/edaa6df7-e78b5abd})

[comment]: # ({67e9a7db-9922adb7})
##### mazajiem burtiem {#lowercase}

Visu makro vērtības rakstzīmju pārveidošana uz mazajiem burtiem.
Darbojas ar viena baita rakstzīmju kopām (piemēram, ASCII) un neatbalsta UTF-8.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Piemērs:

```default
{{ITEM.VALUE}.lowercase()} - pārveidos vērtību, piemēram, "Zabbix SERVER", par "zabbix server" (mazajiem burtiem)
```

[comment]: # ({/67e9a7db-9922adb7})

[comment]: # ({40208dc1-031347c2})
##### regrepl(pattern,replacement,<pattern2>,<replacement2>,...) {#regrepl}

Rakstzīmes/apakšvirknes aizstāšana makro vērtībā.<br>
Ņemiet vērā, ka šī funkcija tiek atbalstīta tikai ar **libpcre2** bibliotēku.
Ja Zabbix serveris/starpniekserveris tika kompilēts ar `libpcre`, šī funkcija atgriezīs UNKNOWN.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Parametri:

-   **pattern** - regulārā izteiksme, kurai jāsakrīt;
-   **replacement** - aizstāšanas virkne.
**\\1 - \\9** vietturi tiek atbalstīti aizstāšanas virknēs, lai uztvertu grupas.

Piezīmes:

-   Raksti un aizstāšanas tiek apstrādāti secīgi, un katrs nākamais pāris tiek lietots atbilstoši iepriekšējās aizstāšanas rezultātam;
-   Atsauces uz neesošām uztveršanas grupām aizstāšanas virknē tiek aizstātas ar tukšu virkni.

Piemēri:

```default
{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - aizstās "oldParam" ar "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - visas rakstzīmes, kas nav burti, tiks ekrānētas ar atpakaļsvītru
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - noņems beigu atpakaļsvītru (piemēram, lai aizstātu "C:\" ar "C:")
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - aizstās vairākas daļas vienuma vērtībā
```

[comment]: # ({/40208dc1-031347c2})

[comment]: # ({825c2e80-a8dcf3b5})
##### regsub(pattern,output) {#regsub}

Apakšvirknes izvilkšana pēc atbilstības regulārajai izteiksmei (reģistrjutīga).

Parametri:

-   **pattern** - regulārā izteiksme atbilstības noteikšanai;
-   **output** - izvades opcijas.
**\\1 - \\9** vietturi tiek atbalstīti grupu uztveršanai.
**\\0** atgriež atbilstošo tekstu.

Komentāri:

-   Ja regulārajai izteiksmei nav atbilstības, funkcija atgriež tukšu virkni.
-   Ja funkcijas pattern ir nekorekta regulārā izteiksme, tad makro tiek novērtēts kā 'UNKNOWN' (izņemot zema līmeņa atklāšanas makro, kur šī funkcija tiks ignorēta un makro paliks neatrisināts).
-   Atsauces uz neeksistējošām uztveršanas grupām aizvietošanas virknē tiek aizstātas ar tukšu virkni.

Piemēri:

```default
{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - tiks atrisināts kā "Problem ID: 123", ja tiek saņemta vērtība, piemēram, "123 Log line"
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - tiks atrisināts kā "ERROR", ja tiek saņemtas apakšvirknes "fail", "error", "fault" vai "problem" (reģistrjutīgi); atgriezīs tukšu virkni, ja atbilstības nav
```

Skatiet [vairāk piemēru](#additional-examples).

[comment]: # ({/825c2e80-a8dcf3b5})

[comment]: # ({f0be3d81-e91a391f})
##### tr(characters,replacement) {#tr}

Makro vērtības rakstzīmju transliterācija.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

-   **characters** - aizvietojamo rakstzīmju kopa;
-   **replacement** - pozicionāli atbilstošo aizvietošanas rakstzīmju kopa.
  
Piemēri:

```default
{{ITEM.VALUE}.tr(abc, xyz)} - aizstās visus "a" ar "x", "b" ar "y", "c" ar "z"
{{ITEM.VALUE}.tr(abc, xyzq)} - aizstās visus "a" ar "x", "b" ar "y", "c" ar "z" ("q" tiek ignorēts)
{{ITEM.VALUE}.tr(abcde, xyz)} - aizstās visus "a" ar "x", "b" ar "y", "c" ar "z", "d" ar "z", "e" ar "z" (t. i., xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - aizstās visus atpakaļslīpsvītras simbolus ar slīpsvītru uz priekšu, vienpēdiņas ar dubultpēdiņām
{{ITEM.VALUE}.tr(A-Z,a-z)} - pārvērtīs visus burtus mazajos burtos
{{ITEM.VALUE}.tr(0-9a-z,*)} - aizstās visus skaitļus un mazos burtus ar "*"
{{ITEM.VALUE}.tr(0-9,ab)} - aizstās visus 0 ar "a" un visus 1, 2, 3, 4, 5, 6, 7, 8 un 9 ar "b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - aizstās visus skaitļus, "abc" rakstzīmes un A-L diapazonu ar "*"
{{ITEM.VALUE}.tr("\n","*")} - aizstās rindas beigu rakstzīmes ar *
{{ITEM.VALUE}.tr("e", "\n")} - aizstās visus "e" ar rindas beigu rakstzīmi
```

Lai iekļautu burtiskas rakstzīmes:

```default
atpakaļslīpsvītra - jāekranē kā \\
vienpēdiņa - jāekranē kā \'
dubultpēdiņa - jāekranē kā \"
```

Atbalstītās atsoļošanas secības ar atpakaļslīpsvītru:

```default
\\\\ => \\ - dubultā atpakaļslīpsvītra uz vienu atpakaļslīpsvītru
\\a  => \a - trauksmes signāls
\\b  => \b - atpakaļatkāpe
\\f  => \f - lapas padeve
\\n  => \n - jauna rinda
\\r  => \r - atgriešana
\\t  => \t - horizontālā tabulācija
\\v  => \v - vertikālā tabulācija
```

[comment]: # ({/f0be3d81-e91a391f})

[comment]: # ({ec9dd6cc-d8a53517})
##### lielo burtu {#uppercase}

Visu makro vērtības rakstzīmju pārveidošana uz lielajiem burtiem.
Darbojas ar viena baita rakstzīmju kopām (piemēram, ASCII) un neatbalsta UTF-8.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Piemērs:

```default
{{ITEM.VALUE}.uppercase()} - pārveidos tādu vērtību kā "Zabbix Server" par "ZABBIX SERVER" (lielie burti)
```

[comment]: # ({/ec9dd6cc-d8a53517})

[comment]: # ({98faa99f-4fb82e83})
##### urldecode {#urldecode}

Makro vērtības atkodēšana no URL kodējuma.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Piemērs:

```default
{{ITEM.VALUE}.urldecode()} - URL atkodēs vērtību, piemēram, "%2F" uz "/"
```

[comment]: # ({/98faa99f-4fb82e83})

[comment]: # ({8b7a9c23-8dec62fd})
##### urlencode {#urlencode}

Makro vērtības kodēšana URL kodējumā.
Šī funkcija tiek atbalstīta kopš Zabbix 7.0.4.

Piemērs:

```default
{{ITEM.VALUE}.urlencode()} - kodēs rakstzīmi, piemēram, "/" uz "%2F"
```

[comment]: # ({/8b7a9c23-8dec62fd})

[comment]: # ({a95b22c2-b6fdaa9a})
#### Papildu piemēri

Tālāk esošajā tabulā ir parādīti vēl vairāki makro funkciju lietošanas piemēri.

:::noteinfo
`{#IFALIAS}` ir [LLD makro](/manual/config/macros/lld_macros) un ir definēts tikai zema līmeņa atklāšanas kontekstos (atklāšanas noteikumos, prototipos un no tiem izveidotajos vienumos/trigeros).
Ja to izmantosiet ārpus LLD, tokens netiks izvērsts.
:::

|Makro funkcija|Saņemtā vērtība|Izvade|
|-------------|----|-------------|
|`{{ITEM.VALUE}.regsub(^[0-9]+, Problem)}`|`123Log line`|`Problem`|
|`{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")}`|`123 Log line`|`Problem`|
|`{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")}`|`Log line`|`Problem ID: `|
|`{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")}`|`MySQL crashed errno 123`|` Problem ID: MySQL_123 `|
|`{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")}`|`123 Log line`|`*UNKNOWN*` (nederīga regulārā izteiksme)|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}`|`customername_1`|`customername`|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}`|`customername_1`|`1`|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}`|`customername_1`|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}` (nederīga regulārā izteiksme)|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"}`|`customername_1`|`{$MACRO:"customername"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"}`|`customername_1`|`{$MACRO:"1"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}`|`customername_1`|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}` (nederīga regulārā izteiksme)|
|`"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}\"}"`|`customername_1`|`"{$MACRO:"\customername\"}"`|
|`"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}\"}"`|`customername_1`|`"{$MACRO:"\1\"}"`|
|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"`|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"` (nederīga regulārā izteiksme)|

##### Pilnu vienuma vērtību skatīšana

Atrisināto {ITEM.VALUE} un {ITEM.LASTVALUE} makro garās vērtības teksta/žurnāla vienumiem dažās lietotāja saskarnes vietās tiek saīsinātas līdz 20 rakstzīmēm.
Lai redzētu šo makro pilnās vērtības, varat izmantot makro funkcijas, piemēram:

```default
{{ITEM.VALUE}.regsub("(.*)", \1)}
{{ITEM.LASTVALUE}.regsub("(.*)", \1)}
```

Skatiet arī: {ITEM.VALUE} un {ITEM.LASTVALUE} [makro detaļas](/manual/appendix/macros/supported_by_location).

[comment]: # ({/a95b22c2-b6fdaa9a})
