Áú»¢¶Ä²©

5 §±§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§Ö §Þ§à§Õ§å§Ý§Ú

1 §°§Ò§Ù§à§â

§±§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§Ö §Þ§à§Õ§å§Ý§Ú §á§â§Ö§Õ§Ý§Ñ§Ô§Ñ§ð§ä §á§â§à§Ú§Ù§Ó§à§Õ§Ú§ä§Ö§Ý§î§ß§å§ð §à§á§è§Ú§ð §Õ§Ý§ñ §â§Ñ§ã§ê§Ú§â§Ö§ß§Ú§ñ §æ§å§ß§Ü§è§Ú§à§ß§Ñ§Ý§î§ß§à§ã§ä§Ú Áú»¢¶Ä²©.

§µ§Ø§Ö §Ú§Þ§Ö§ð§ä§ã§ñ §Ó§à§Ù§Þ§à§Ø§ß§à§ã§ä§Ú §Õ§Ý§ñ §â§Ñ§ã§ê§Ú§â§Ö§ß§Ú§ñ §æ§å§ß§Ü§è§Ú§à§ß§Ñ§Ý§î§ß§à§ã§ä§Ú Áú»¢¶Ä²© §á§â§Ú §á§à§Þ§à§ë§Ú:

§°§ß§Ú §â§Ñ§Ò§à§ä§Ñ§ð§ä §à§é§Ö§ß§î §ç§à§â§à§ê§à, §ß§à §Ú§Þ§Ö§ð§ä §Ô§Ý§Ñ§Ó§ß§í§Û §ß§Ö§Õ§à§ã§ä§Ñ§ä§à§Ü, §ß§Ñ§Ù§í§Ó§Ñ§Ö§Þ§í§Û §æ§à§â§Ü§à§Þ (fork()). Áú»¢¶Ä²© §Õ§à§Ý§Ø§Ö§ß §ã§à§Ù§Õ§Ñ§Ó§Ñ§ä§î §ß§à§Ó§í§Û §à§ä§Ó§Ö§ä§Ó§Ý§Ö§ß§ß§í§Û §á§â§à§è§Ö§ã§ã §Ü§Ñ§Ø§Õ§í§Û §â§Ñ§Ù §Õ§Ý§ñ §ã§Ò§à§â§Ñ §á§à§Ý§î§Ù§à§Ó§Ñ§ä§Ö§Ý§î§ã§Ü§Ú§ç §á§â§à§Ó§Ö§â§à§Ü, §é§ä§à §ß§Ö §à§é§Ö§ß§î §ç§à§â§à§ê§à §ã§Ü§Ñ§Ù§í§Ó§Ñ§Ö§ä§ã§ñ §ß§Ñ §á§â§à§Ú§Ù§Ó§à§Õ§Ú§ä§Ö§Ý§î§ß§à§ã§ä§Ú. §°§Ò§í§é§ß§à §ï§ä§à §ß§Ö §ã§Ñ§Þ§Ñ§ñ §Ò§à§Ý§î§ê§Ñ§ñ §á§â§à§Ò§Ý§Ö§Þ§Ñ, §ß§à §ä§Ö§Þ §ß§Ö §Þ§Ö§ß§Ö§Ö §ï§ä§à §Þ§à§Ø§Ö§ä §Ò§í§ä§î §ã§Ö§â§î§Ö§Ù§ß§à§Û §á§â§à§Ò§Ý§Ö§Þ§à§Û §Õ§Ý§ñ §Þ§à§ß§Ú§ä§à§â§Ú§ß§Ô§Ñ §Ó§ã§ä§â§à§Ö§ß§ß§í§ç §ã§Ú§ã§ä§Ö§Þ, §Ú§Þ§Ö§ð§ë§Ú§ç §Ò§à§Ý§î§ê§à§Ö §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à §ß§Ñ§Ò§Ý§ð§Õ§Ñ§Ö§Þ§í§ç §á§Ñ§â§Ñ§Þ§Ö§ä§â§à§Ó §Ú§Ý§Ú §ä§ñ§Ø§Ö§Ý§í§ç §ã§Ü§â§Ú§á§ä§à§Ó §ã§à §ã§Ý§à§Ø§ß§à§Û §Ý§à§Ô§Ú§Ü§à§Û §Ú§Ý§Ú §Õ§Ý§Ú§ä§Ö§Ý§î§ß§í§Þ §Ó§â§Ö§Þ§Ö§ß§Ö§Þ §Ù§Ñ§á§å§ã§Ü§Ñ.

§±§à§Õ§Õ§Ö§â§Ø§Ü§Ñ §á§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§ç §Þ§à§Õ§å§Ý§Ö§Û §á§â§Ö§Õ§Ý§Ñ§Ô§Ñ§Ö§ä §á§å§ä§Ú §â§Ñ§ã§ê§Ú§â§Ö§ß§Ú§ñ Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä§Ñ, §ã§Ö§â§Ó§Ö§â§Ñ §Ú §á§â§à§Ü§ã§Ú §Ò§Ö§Ù §å§ë§Ö§â§Ò§Ñ §á§â§à§Ú§Ù§Ó§à§Õ§Ú§ä§Ö§Ý§î§ß§à§ã§ä§Ú.

§±§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§Û §Þ§à§Õ§å§Ý§î - §Ó §ã§Ó§à§Ö§Û §à§ã§ß§à§Ó§Ö §â§Ñ§Ù§Õ§Ö§Ý§ñ§Ö§Þ§Ñ§ñ §Ò§Ú§Ò§Ý§Ú§à§ä§Ö§Ü§Ñ §Ú§ã§á§à§Ý§î§Ù§å§Ö§Þ§Ñ§ñ Áú»¢¶Ä²© §Õ§Ö§Þ§à§ß§à§Þ §Ú §Ù§Ñ§Ô§â§å§Ø§Ñ§Ö§Þ§Ñ§ñ §á§â§Ú §ã§ä§Ñ§â§ä§Ö §Õ§Ö§Þ§à§ß§Ñ. §¢§Ú§Ò§Ý§Ú§à§ä§Ö§Ü§Ñ §Õ§à§Ý§Ø§ß§Ñ §ã§à§Õ§Ö§â§Ø§Ñ§ä§î §à§á§â§Ö§Õ§Ö§Ý§Ö§ß§ß§í§Ö §æ§å§ß§Ü§è§Ú§Ú §ä§Ñ§Ü§Ú§Ö, §é§ä§à§Ò§í Áú»¢¶Ä²© §á§â§à§è§Ö§ã§ã §Þ§à§Ô §à§á§â§Ö§Õ§Ö§Ý§Ú§ä§î §é§ä§à §æ§Ñ§Û§Ý §ß§Ñ §ã§Ñ§Þ§à§Þ §Õ§Ö§Ý§Ö §Þ§à§Õ§å§Ý§î §Ú §à§ß §Þ§à§Ø§Ö§ä §Ù§Ñ§Ô§â§å§Ù§Ú§ä§î §Ö§Ô§à §Ú §â§Ñ§Ò§à§ä§Ñ§ä§î §ã §ß§Ú§Þ.

§±§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§Ö §Þ§à§Õ§å§Ý§Ú §Ú§Þ§Ö§ð§ä §Þ§ß§à§Ô§à §á§â§Ö§Ú§Þ§å§ë§Ö§ã§ä§Ó. §°§ä§Ý§Ú§é§ß§Ñ§ñ §á§â§à§Ú§Ù§Ó§à§Õ§Ú§ä§Ö§Ý§î§ß§à§ã§ä§î §Ú §Ó§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §Ó§ß§Ö§Õ§â§Ö§ß§Ú§ñ §Ó §Ý§ð§Ò§å§ð §Ý§à§Ô§Ú§Ü§å §é§ä§à §à§é§Ö§ß§î §Ó§Ñ§Ø§ß§à, §ß§à §Ó§à§Ù§Þ§à§Ø§ß§à §ß§Ñ§Ú§Ò§à§Ý§Ö§Ö §Ó§Ñ§Ø§ß§à§Ö §á§â§Ö§Ú§Þ§å§ë§Ö§ã§ä§Ó§à - §Ó§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §â§Ñ§Ù§Ó§Ú§ä§Ú§ñ, §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§ñ §Ú §â§Ñ§ã§á§â§à§ã§ä§â§Ñ§ß§Ö§ß§Ú§ñ Áú»¢¶Ä²© §Þ§à§Õ§å§Ý§Ö§Û. §¿§ä§à §á§à§ã§á§à§ã§à§Ò§ã§ä§Ó§å§Ö§ä §Ò§Ö§Ù§á§â§à§Ò§Ý§Ö§Þ§ß§à§Þ§å §à§Ò§ã§Ý§å§Ø§Ú§Ó§Ñ§ß§Ú§ð §Ú §á§à§Þ§à§Ø§Ö§ä §Ó§ß§à§ã§Ú§ä§î §ß§à§Ó§å§ð §æ§å§ß§Ü§è§Ú§à§ß§Ñ§Ý§î§ß§à§ã§ä§î §Ý§Ö§Ô§é§Ö §Ú §ß§Ö§Ù§Ñ§Ó§Ú§ã§Ú§Þ§à §à§ä §Ü§à§Õ§Ñ §ñ§Õ§â§Ñ Áú»¢¶Ä²©.

§­§Ú§è§Ö§ß§Ù§Ú§â§à§Ó§Ñ§ß§Ú§Ö §Ú §â§Ñ§ã§á§â§à§ã§ä§â§Ñ§ß§Ö§ß§Ú§Ö §Þ§à§Õ§å§Ý§Ö§Û §Ó §Ò§Ú§ß§Ñ§â§ß§à§Û §æ§à§â§Þ§Ö §â§Ö§Ô§Ý§Ñ§Þ§Ö§ß§ä§Ú§â§å§Ö§ä§ã§ñ GPL §Ý§Ú§è§Ö§ß§Ù§Ú§Ö§Û (§Þ§à§Õ§å§Ý§Ú §Ý§Ú§ß§Ü§å§ð§ä§ã§ñ §ã Áú»¢¶Ä²© §Ó§à §Ó§â§Ö§Þ§ñ §Ó§í§á§à§Ý§ß§Ö§ß§Ú§ñ §Ú §Ú§ã§á§à§Ý§î§Ù§å§ð§ä §Ù§Ñ§Ô§à§Ý§à§Ó§Ü§Ú Áú»¢¶Ä²©; §Ó §ß§Ñ§ã§ä§à§ñ§ë§Ö§Ö §Ó§â§Ö§Þ§ñ §Ó§Ö§ã§î §Ü§à§Õ Áú»¢¶Ä²© §Ý§Ú§è§Ö§ß§Ù§Ú§â§å§Ö§ä§ã§ñ §á§à§Õ GPL §Ý§Ú§è§Ö§ß§Ù§Ú§Ö§Û). §¢§Ú§ß§Ñ§â§ß§Ñ§ñ §ã§à§Ó§Þ§Ö§ã§ä§Ú§Þ§à§ã§ä§î §ß§Ö §Ô§Ñ§â§Ñ§ß§ä§Ú§â§å§Ö§ä§ã§ñ Áú»¢¶Ä²©'§à§Þ.

§±§à§ã§ä§à§ñ§ß§ã§ä§Ó§à API §Þ§à§Õ§å§Ý§Ö§Û §Ô§Ñ§â§Ñ§ß§ä§Ú§â§å§Ö§ä§ã§ñ §Ó §á§â§Ö§Õ§Ö§Ý§Ñ§ç §à§Õ§ß§à§Ô§à §è§Ú§Ü§Ý§Ñ Áú»¢¶Ä²© LTS (§¥§à§Ý§Ô§à§ã§â§à§é§ß§Ñ§ñ §á§à§Õ§Õ§Ö§â§Ø§Ü§Ñ) §Ó§í§á§å§ã§Ü§Ñ. §±§à§ã§ä§à§ñ§ß§ã§ä§Ó§à Áú»¢¶Ä²© API §ß§Ö §Ô§Ñ§â§Ñ§ä§Ú§â§å§Ö§ä§ã§ñ (§ä§Ö§ç§ß§Ú§é§Ö§ã§Ü§Ú §Ú§Þ§Ö§Ö§ä§ã§ñ §Ó§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §Ó§í§Ù§à§Ó§Ñ §Ó§ß§å§ä§â§Ö§ß§ß§Ú§ç §æ§å§ß§Ü§è§Ú§Û Áú»¢¶Ä²© §Ú§Ù §Þ§à§Õ§å§Ý§ñ, §ß§à §Ô§Ñ§â§Ñ§ß§ä§Ú§Ú, §é§ä§à §ä§Ñ§Ü§Ú§Ö §Þ§à§Õ§å§Ý§Ú §Ò§å§Õ§å§ä §â§Ñ§Ò§à§ä§Ñ§ä§î §ß§Ö§ä).

2 API §Þ§à§Õ§å§Ý§Ö§Û

§¥§Ý§ñ §ä§à§Ô§à §é§ä§à§Ò§í §â§Ñ§Ù§Õ§Ö§Ý§ñ§Ö§Þ§Ñ§ñ §Ò§Ú§Ò§Ý§Ú§à§ä§Ö§Ü§Ñ §à§Ò§â§Ñ§Ò§Ñ§ä§í§Ó§Ñ§Ý§Ñ§ã§î §Ü§Ñ§Ü Áú»¢¶Ä²© §Þ§à§Õ§å§Ý§î, §à§ß§Ñ §Õ§à§Ý§Ø§ß§Ñ §â§Ö§Ñ§Ý§Ú§Ù§à§Ó§í§Ó§Ñ§ä§î §Ú §ï§Ü§ã§á§à§â§ä§Ú§â§à§Ó§Ñ§ä§î §ß§Ö§ã§Ü§à§Ý§î§Ü§à §æ§å§ß§Ü§è§Ú§Û. §¯§Ñ §Õ§Ñ§ß§ß§í§Û §Þ§à§Þ§Ö§ß§ä §Ú§Þ§Ö§Ö§ä§ã§ñ §ê§Ö§ã§ä§î §æ§å§ß§Ü§è§Ú§Û §Ó API §Þ§à§Õ§å§Ý§Ö§Û Áú»¢¶Ä²©, §ä§à§Ý§î§Ü§à §à§Õ§ß§Ñ §Ú§Ù §Ü§à§ä§à§â§í§ç §à§Ò§ñ§Ù§Ñ§ä§Ö§Ý§î§ß§í, §Ñ §à§ã§ä§Ñ§Ý§î§ß§í§Ö §á§ñ§ä§î - §à§á§è§Ú§à§ß§Ñ§Ý§î§ß§í.

2.1 §°§Ò§ñ§Ù§Ñ§ä§Ö§Ý§î§ß§í§Û §Ú§ß§ä§Ö§â§æ§Ö§Û§ã

§¦§Õ§Ú§ß§ã§ä§Ó§Ö§ß§ß§Ñ§ñ §à§Ò§ñ§Ù§Ñ§ä§Ö§Ý§î§ß§Ñ§ñ §æ§å§ß§Ü§è§Ú§Ú - zbx_module_api_version():

int zbx_module_api_version(void);

§¿§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§ä§î API §Ó§Ö§â§ã§Ú§ð §â§Ö§Ñ§Ý§Ú§Ù§à§Ó§Ñ§ß§ß§å§ð §Ó §Þ§à§Õ§å§Ý§Ö §Ú, §é§ä§à§Ò§í §Þ§à§Õ§å§Ý§î §Ù§Ñ§Ô§â§å§Ù§Ú§Ý§ã§ñ, §Ó§Ö§â§ã§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §ã§à§Ó§á§Ñ§Õ§Ñ§ä§î §ã §Ó§Ö§â§ã§Ú§Ö§Û API §Þ§à§Õ§å§Ý§Ö§Û §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§Þ§à§Û Áú»¢¶Ä²©. §£§Ö§â§ã§Ú§Ö§Û API §Þ§à§Õ§å§Ý§Ö§Û §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§Þ§à§Û Áú»¢¶Ä²© §ñ§Ó§Ý§ñ§Ö§ä§ã§ñ ZBX_MODULE_API_VERSION. §´§Ñ§Ü§Ú§Þ §à§Ò§â§Ñ§Ù§à§Þ §ï§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§ä§î §ï§ä§å §Ü§à§ß§ã§ä§Ñ§ß§ä§å. §³§ä§Ñ§â§Ñ§ñ §Ü§à§ß§ã§ä§Ñ§ß§ä§Ñ ZBX_MODULE_API_VERSION_ONE, §Ü§à§ä§à§â§Ñ§ñ §â§Ñ§ß§Ö§Ö §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§Ý§Ñ§ã§î §Õ§Ý§ñ §ï§ä§Ú§ç §è§Ö§Ý§Ö§Û, §ä§Ö§á§Ö§â§î §à§á§â§Ö§Õ§Ö§Ý§Ö§ß§Ñ §â§Ñ§Ó§ß§à§Û ZBX_MODULE_API_VERSION §Õ§Ý§ñ §ã§à§ç§â§Ñ§ß§Ö§ß§Ú§ñ §ã§à§Ó§Þ§Ö§ã§ä§Ú§Þ§à§ã§ä§Ú §Ú§ã§ç§à§Õ§ß§à§Ô§à §Ü§à§Õ§Ñ, §ß§à §Ö§× §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö §ß§Ö §â§Ö§Ü§à§Þ§Ö§ß§Õ§å§Ö§ä§ã§ñ.

2.2 §°§á§è§Ú§à§ß§Ñ§Ý§î§ß§í§Û §Ú§ß§ä§Ö§â§æ§Ö§Û§ã

§°§á§è§Ú§à§ß§Ñ§Ý§î§ß§í§Þ§Ú §æ§å§ß§Ü§è§Ú§ñ§Þ§Ú §ñ§Ó§Ý§ñ§ð§ä§ã§ñ §ã§Ý§Ö§Õ§å§ð§ë§Ú§Ö §æ§å§ß§Ü§è§Ú§Ú - zbx_module_init(), zbx_module_item_list(), zbx_module_item_timeout(), zbx_module_history_write_cbs() §Ú zbx_module_uninit():

int zbx_module_init(void);

§¿§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§í§á§à§Ý§ß§ñ§ä§î §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§å§ð §Ú§ß§Ú§è§Ú§Ñ§Ý§Ú§Ù§Ñ§è§Ú§ð §Õ§Ý§ñ §Þ§à§Õ§å§Ý§ñ (§Ö§ã§Ý§Ú §ä§Ñ§Ü§à§Ó§í§Ö §Ú§Þ§Ö§ð§ä§ã§ñ). §£ §ã§Ý§å§é§Ñ§Ö §å§ã§á§Ö§ç§Ñ, §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§Ö§â§ß§å§ä§î ZBX_MODULE_OK. §£ §á§â§à§ä§Ú§Ó§ß§à§Þ §ã§Ý§å§é§Ñ§Ö, §à§ß§Ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§Ö§â§ß§å§ä§î ZBX_MODULE_FAIL. §£ §á§à§ã§Ý§Ö§Õ§ß§Ö§Þ §ã§Ý§å§é§Ñ§Ö Áú»¢¶Ä²© §ß§Ö §Ù§Ñ§á§å§ã§ä§Ú§ä§ã§ñ.

ZBX_METRIC  *zbx_module_item_list(void);

§¿§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§ä§î §ã§á§Ú§ã§à§Ü §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó §Õ§Ñ§ß§ß§í§ç, §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§Þ§í§ç §Þ§à§Õ§å§Ý§Ö§Þ. §¬§Ñ§Ø§Õ§í§Û §ï§Ý§Ö§Þ§Ö§ß§ä §Õ§Ñ§ß§ß§í§ç §å§Ü§Ñ§Ù§í§Ó§Ñ§Ö§ä§ã§ñ §Ó §ã§ä§â§å§Ü§ä§å§â§Ö ZBX_METRIC, §ã§Þ§à§ä§â§Ú§ä§Ö §â§Ñ§Ù§Õ§Ö§Ý §ß§Ú§Ø§Ö §Õ§Ý§ñ §á§à§Õ§â§à§Ò§ß§à§ã§ä§Ö§Û. §³§á§Ú§ã§à§Ü §Ù§Ñ§Ó§Ö§â§ê§Ñ§Ö§ä§ã§ñ §á§â§Ú §á§à§Þ§à§ë§Ú §ã§ä§â§å§Ü§ä§å§â§í ZBX_METRIC §ã §á§à§Ý§Ö§Þ "key" §â§Ñ§Ó§ß§í§Þ NULL.

void    zbx_module_item_timeout(int timeout);

§¦§ã§Ý§Ú §Þ§à§Õ§å§Ý§î §ï§Ü§ã§á§à§â§ä§Ú§â§å§Ö§ä zbx_module_item_list(), §ä§à§Ô§Õ§Ñ §ï§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Ú§ã§á§à§Ý§î§Ù§å§Ö§ä§ã§ñ Áú»¢¶Ä²©, §é§ä§à§Ò§í §Ù§Ñ§Õ§Ñ§ä§î §à§á§è§Ú§ð §Ó§â§Ö§Þ§Ö§ß§Ú §à§Ø§Ú§Õ§Ñ§ß§Ú§ñ §Ó §æ§Ñ§Û§Ý§Ö §Ü§à§ß§æ§Ú§Ô§å§â§Ñ§è§Ú§Ú Áú»¢¶Ä²©, §Ü§à§ä§à§â§à§Û §á§â§à§Ó§Ö§â§Ü§Ú §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó §Õ§Ñ§ß§ß§í§ç §â§Ö§Ñ§Ý§Ú§Ù§à§Ó§Ñ§ß§ß§í§ç §Ó §Þ§à§Õ§å§Ý§Ö §Õ§à§Ý§Ø§ß§í §á§à§Õ§é§Ú§ß§ñ§ä§î§ã§ñ. §©§Õ§Ö§ã§î, §á§Ñ§â§Ñ§Þ§Ö§ä§â "§Ó§â§Ö§Þ§ñ §à§Ø§Ú§Õ§Ñ§ß§Ú§ñ" §Ù§Ñ§Õ§Ñ§Ö§ä§ã§ñ §Ó §ã§Ö§Ü§å§ß§Õ§Ñ§ç.

ZBX_HISTORY_WRITE_CBS   zbx_module_history_write_cbs(void);

§¿§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§ä§î §æ§å§ß§Ü§è§Ú§Ú §à§Ò§â§Ñ§ä§ß§à§Ô§à §Ó§í§Ù§à§Ó§Ñ (callback), §Ü§à§ä§à§â§í§Ö §Ò§å§Õ§å§ä §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î§ã§ñ Áú»¢¶Ä²© §ã§Ö§â§Ó§Ö§â§à§Þ §Õ§Ý§ñ §ï§Ü§ã§á§à§â§ä§Ñ §Ú§ã§ä§à§â§Ú§Ú §â§Ñ§Ù§Ý§Ú§é§ß§í§ç §ä§Ú§á§à§Ó §Õ§Ñ§ß§ß§í§ç. §¶§å§ß§Ü§è§Ú§Ú §à§Ò§â§Ñ§ä§ß§à§Ô§à §Ó§í§Ù§à§Ó§Ñ §á§â§Ö§Õ§ã§ä§Ñ§Ó§Ý§ñ§ð§ä §ã§à§Ò§à§Û §á§à§Ý§ñ ZBX_HISTORY_WRITE_CBS §ã§ä§â§å§Ü§ä§å§â§í, §á§à§Ý§ñ §Þ§à§Ô§å§ä §Ò§í§ä§î NULL, §Ö§ã§Ý§Ú §Þ§à§Õ§å§Ý§î §ß§Ö §Ù§Ñ§Ú§ß§ä§Ö§â§Ö§ã§à§Ó§Ñ§ß §Ó §Ú§ã§ä§à§â§Ú§Ú §ß§Ö§Ü§à§ä§à§â§à§Ô§à §ä§Ú§á§Ñ.

int zbx_module_uninit(void);

§¿§ä§Ñ §æ§å§ß§Ü§è§Ú§ñ §Õ§à§Ý§Ø§ß§Ñ §Ó§í§á§à§Ý§ß§ñ§ä§î §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§í§Ö §Õ§Ö§Ú§ß§Ú§è§Ú§Ñ§Ý§Ú§Ù§Ñ§è§Ú§Ú (§Ö§ã§Ý§Ú §ä§Ñ§Ü§à§Ó§í§Ö §Ú§Þ§Ö§ð§ä§ã§ñ), §ä§Ñ§Ü§Ú§Ö §Ü§Ñ§Ü §à§ã§Ó§à§Ò§à§Ø§Õ§Ö§ß§Ú§Ö §Ó§í§Õ§Ö§Ý§Ö§ß§ß§í§ç §â§Ö§ã§å§â§ã§à§Ó, §Ù§Ñ§Ü§â§í§ä§Ú§Ö §æ§Ñ§Û§Ý§à§Ó§í§ç §Õ§Ö§ã§Ü§â§Ú§á§ä§à§â§à§Ó §Ú §ä§Ñ§Ü §Õ§Ñ§Ý§Ö§Ö.

§£§ã§Ö §æ§å§ß§è§Ú§Ú §Ó§í§Ù§í§Ó§Ñ§ð§ä§ã§ñ §à§Õ§Ú§ß §â§Ñ§Ù §á§â§Ú §Ù§Ñ§á§å§ã§Ü§Ö Áú»¢¶Ä²©, §Ü§à§Ô§Õ§Ñ §Þ§à§Õ§å§Ý§î §Ù§Ñ§Ô§â§å§Ø§Ö§ß, §Ù§Ñ §Ú§ã§Ü§Ý§ð§é§Ö§ß§Ú§Ö§Þ zbx_module_uninit(), §Ü§à§ä§à§â§Ñ§ñ §Ó§í§Ù§í§Ó§Ñ§Ö§ä§ã§ñ §à§Õ§Ú§ß §â§Ñ§Ù §á§â§Ú §Ù§Ñ§Ó§Ö§â§ê§Ö§ß§Ú§Ú §â§Ñ§Ò§à§ä§í Áú»¢¶Ä²©, §Ü§à§Ô§Õ§Ñ §Þ§à§Õ§å§Ý§î §Ó§í§Ô§â§å§Ø§Ö§ß.

2.3 §°§á§â§Ö§Õ§Ö§Ý§Ö§ß§Ú§Ö §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó §Õ§Ñ§ß§ß§í§ç

§¬§Ñ§Ø§Õ§í§Û §ï§Ý§Ö§Þ§Ö§ß§ä §Õ§Ñ§ß§ß§í§ç §à§á§â§Ö§Õ§Ö§Ý§ñ§Ö§ä§ã§ñ §Ó §ã§ä§â§å§Ü§ä§å§â§Ö ZBX_METRIC:

typedef struct
       {
           char        *key;
           unsigned    flags;
           int     (*function)();
           char        *test_param;
       }
       ZBX_METRIC;

§©§Õ§Ö§ã§î, key - §Ü§Ý§ð§é §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç (§ß§Ñ§á§â§Ú§Þ§Ö§â, "dummy.random"), flags - §Ý§Ú§Ò§à CF_HAVEPARAMS, §Ý§Ú§Ò§à 0 (§Ó §Ù§Ñ§Ó§Ú§ã§Ú§Þ§à§ã§ä§Ú §à§ä §ä§à§Ô§à, §á§â§Ú§ß§Ú§Þ§Ñ§Ö§ä §Ý§Ú §ï§Ý§Ö§Þ§Ö§ß§ä §Õ§Ñ§ß§ß§í§ç §á§Ñ§â§Ñ§Þ§Ö§ä§â§í §Ú§Ý§Ú §ß§Ö§ä), function - C §æ§å§ß§Ü§è§Ú§ñ, §Ü§à§ä§à§â§Ñ§ñ §à§Ò§â§Ñ§Ò§Ñ§ä§í§Ó§Ñ§Ö§ä §ï§Ý§Ö§Þ§Ö§ß§ä §Õ§Ñ§ß§ß§í§ç (§ß§Ñ§á§â§Ú§Þ§Ö§â, "zbx_module_dummy_random"), §Ú test_param - §ã§á§Ú§ã§à§Ü §á§Ñ§â§Ñ§Þ§Ö§ä§â§à§Ó, §Ü§à§ä§à§â§í§Ö §Ú§ã§á§à§Ý§î§Ù§å§Ö§ä§ã§ñ §Ü§à§Ô§Õ§Ñ Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä §Ù§Ñ§á§å§ã§Ü§Ñ§Ö§ä§ã§ñ §ã §æ§Ý§Ñ§Ô§à§Þ "-p" (§ß§Ñ§á§â§Ú§Þ§Ö§â, "1,1000", §Þ§à§Ø§Ö§ä §Ò§í§ä§î NULL). §±§â§Ú§Þ§Ö§â §à§á§â§Ö§Õ§Ö§Ý§Ö§ß§Ú§ñ §Þ§à§Ø§Ö§ä §Ó§í§Ô§Ý§ñ§Õ§Ö§ä§î §ß§Ñ§á§à§Õ§à§Ò§Ú§Ö §ï§ä§à§Ô§à:

static ZBX_METRIC keys[] =
       {
           { "dummy.random", CF_HAVEPARAMS, zbx_module_dummy_random, "1,1000" },
           { NULL }
       }

§¬§Ñ§Ø§Õ§Ñ§ñ §æ§å§ß§Ü§è§Ú§ñ, §Ü§à§ä§à§â§Ñ§ñ §à§Ò§â§Ñ§Ò§Ñ§ä§í§Ó§Ñ§Ö§ä §ï§Ý§Ö§Þ§Ö§ß§ä §Õ§Ñ§ß§ß§í§ç §Õ§à§Ý§Ø§ß§Ñ §á§â§Ú§ß§Ú§Þ§Ñ§ä§î §Õ§Ó§Ñ §å§Ü§Ñ§Ù§Ñ§ä§Ö§Ý§ñ §á§Ñ§â§Ñ§Þ§Ö§ä§â§Ñ, §á§Ö§â§Ó§í§Û §ã §ä§Ú§á§à§Þ AGENT_REQUEST §Ú §Ó§ä§à§â§à§Û §ã §ä§Ú§á§à§Þ AGENT_RESULT:

int zbx_module_dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result)
       {
           ...
       
           SET_UI64_RESULT(result, from + rand() % (to - from + 1));
       
           return SYSINFO_RET_OK;
       }

§¿§ä§Ú §æ§å§ß§Ü§è§Ú§Ú §Õ§à§Ý§Ø§ß§í §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§ä§î SYSINFO_RET_OK, §Ö§ã§Ý§Ú §Ù§ß§Ñ§é§Ö§ß§Ú§Ö §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç §á§à§Ý§å§é§Ö§ß§à §å§ã§á§Ö§ê§ß§à. §£ §á§â§à§ä§Ú§Ó§ß§à§Þ §ã§Ý§å§é§Ñ§Ö, §æ§å§ß§Ü§è§Ú§Ú §Õ§à§Ý§Ø§ß§í §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§ä§î SYSINFO_RET_FAIL. §³§Þ§à§ä§â§Ú§ä§Ö §á§â§Ú§Þ§Ö§â "dummy" §Þ§à§Õ§å§Ý§ñ §ß§Ú§Ø§Ö §Õ§Ý§ñ §á§à§Ý§å§é§Ö§ß§Ú§ñ §Õ§Ö§ä§Ñ§Ý§Ö§Û §Ü§Ñ§Ü §á§à§Ý§å§é§Ñ§ä§î §Ú§ß§æ§à§â§Þ§Ñ§è§Ú§ð §à§ä AGENT_REQUEST §Ú §Ü§Ñ§Ü §å§Ü§Ñ§Ù§í§Ó§Ñ§ä§î §Ú§ß§æ§à§â§Þ§Ñ§è§Ú§ð §Ó AGENT_RESULT.

2.4 §±§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ý§Ö§ß§Ú§Ö §à§Ò§â§Ñ§ä§ß§à§Ô§à §Ó§í§Ù§à§Ó§Ñ §ï§Ü§ã§á§à§â§ä§å §Ú§ã§ä§à§â§Ú§Ú

§¿§Ü§ã§á§à§â§ä §Ú§ã§ä§à§â§Ú§Ú §é§Ö§â§Ö§Ù §Þ§à§Õ§å§Ý§Ú §Ò§à§Ý§Ö§Ö §ß§Ö §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§ä§ã§ñ Áú»¢¶Ä²© §á§â§à§Ü§ã§Ú §ß§Ñ§é§Ú§ß§Ñ§ñ §ã Áú»¢¶Ä²© 4.0.0.

§®§à§Õ§å§Ý§î §Þ§à§Ø§Ö§ä §Ù§Ñ§Õ§Ñ§Ó§Ñ§ä§î §æ§å§ß§Ü§è§Ú§Ú §Õ§Ý§ñ §ï§Ü§ã§á§à§â§ä§Ñ §Õ§Ñ§ß§ß§í§ç §Ú§ã§ä§à§â§Ú§Ú §á§à §ä§Ú§á§Ñ§Þ: §¹§Ú§ã§Ý§à§Ó§à§Û (§ã §á§Ý§Ñ§Ó§Ñ§ð§ë§Ö§Û §ä§à§é§Ü§à§Û), §¹§Ú§ã§Ý§à§Ó§à§Û (§è§Ö§Ý§à§Ö §á§à§Ý§à§Ø§Ú§ä§Ö§Ý§î§ß§à§Ö), §³§Ú§Þ§Ó§à§Ý, §´§Ö§Ü§ã§ä §Ú §¨§å§â§ß§Ñ§Ý (§Ý§à§Ô):

typedef struct
       {
           void    (*history_float_cb)(const ZBX_HISTORY_FLOAT *history, int history_num);
           void    (*history_integer_cb)(const ZBX_HISTORY_INTEGER *history, int history_num);
           void    (*history_string_cb)(const ZBX_HISTORY_STRING *history, int history_num);
           void    (*history_text_cb)(const ZBX_HISTORY_TEXT *history, int history_num);
           void    (*history_log_cb)(const ZBX_HISTORY_LOG *history, int history_num);
       }
       ZBX_HISTORY_WRITE_CBS;

§¬§Ñ§Ø§Õ§í§Û §Ú§Ù §ß§Ú§ç §Õ§à§Ý§Ø§Ö§ß §á§â§Ú§ß§Ú§Þ§Ñ§ä§î §Þ§Ñ§ã§ã§Ú§Ó "history" §Ú§Ù §ï§Ý§Ö§Þ§Ö§ß§ä§à§Ó "history_num" §Ó §Ó§Ú§Õ§Ö §Ñ§â§Ô§å§Þ§Ö§ß§ä§à§Ó. §£ §Ù§Ñ§Ó§Ú§ã§Ú§Þ§à§ã§ä§Ú §à§ä §ï§Ü§ã§á§à§â§ä§Ú§â§å§Ö§Þ§à§Ô§à §ä§Ú§á§Ñ §Õ§Ñ§ß§ß§í§ç §Ú§ã§ä§à§â§Ú§Ú, "history" §ñ§Ó§Ý§ñ§Ö§ä§ã§ñ §Þ§Ñ§ã§ã§Ú§Ó§à§Þ §Ú§Ù §ã§Ý§Ö§Õ§å§ð§ë§Ú§ç §ã§ä§â§å§Ü§ä§å§â, §ã§à§à§ä§Ó§Ö§ä§ã§ä§Ó§Ö§ß§ß§à:

typedef struct
       {
           zbx_uint64_t    itemid;
           int     clock;
           int     ns;
           double      value;
       }
       ZBX_HISTORY_FLOAT;
       
       typedef struct
       {
           zbx_uint64_t    itemid;
           int     clock;
           int     ns;
           zbx_uint64_t    value;
       }
       ZBX_HISTORY_INTEGER;
       
       typedef struct
       {
           zbx_uint64_t    itemid;
           int     clock;
           int     ns;
           const char  *value;
       }
       ZBX_HISTORY_STRING;
       
       typedef struct
       {
           zbx_uint64_t    itemid;
           int     clock;
           int     ns;
           const char  *value;
       }
       ZBX_HISTORY_TEXT;
       
       typedef struct
       {
           zbx_uint64_t    itemid;
           int     clock;
           int     ns;
           const char  *value;
           const char  *source;
           int     timestamp;
           int     logeventid;
           int     severity;
       }
       ZBX_HISTORY_LOG;

§°§Ò§â§Ñ§ä§ß§í§Ö §Ó§í§Ù§à§Ó§í §Ò§å§Õ§å§ä §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î§ã§ñ Áú»¢¶Ä²© §ã§Ö§â§Ó§Ö§â§à§Þ §á§â§à§è§Ö§ã§ã§Ñ§Þ§Ú §ã§Ú§ß§ç§â§à§ß§Ú§Ù§Ñ§è§Ú§Ú §Ú§ã§ä§à§â§Ú§Ú §Ó §Ü§à§ß§è§Ö §á§â§à§è§Ö§Õ§å§â§í §ã§Ú§ß§ç§â§à§ß§Ú§Ù§Ñ§è§Ú§Ú §Ú§ã§ä§à§â§Ú§Ú §á§à§ã§Ý§Ö §ä§à§Ô§à, §Ü§Ñ§Ü §Õ§Ñ§ß§ß§í§Ö §Ù§Ñ§á§Ú§ã§Ñ§ß§í §Ó §Ò§Ñ§Ù§å §Õ§Ñ§ß§ß§í§ç Áú»¢¶Ä²© §Ú §ã§à§ç§â§Ñ§ß§Ö§ß§í §Ó §Ü§ï§ê §Ù§ß§Ñ§é§Ö§ß§Ú§Û.

2.5 §³§Ò§à§â§Ü§Ñ §Þ§à§Õ§å§Ý§Ö§Û

§£ §ß§Ñ§ã§ä§à§ñ§ë§Ö§Ö §Ó§â§Ö§Þ§ñ §á§à§Õ§â§Ñ§Ù§å§Þ§Ö§Ó§Ñ§Ö§ä§ã§ñ, §é§ä§à §Þ§à§Õ§å§Ý§Ú §Õ§à§Ý§Ø§ß§í §Ò§í§ä§î §ã§à§Ò§â§Ñ§ß§í §Ó§ß§å§ä§â§Ú §Õ§Ö§â§Ö§Ó§Ñ §Ú§ã§ç§à§Õ§ß§í§ç §Ü§à§Õ§à§Ó Áú»¢¶Ä²©, §ä§Ñ§Ü §Ü§Ñ§Ü API §Þ§à§Õ§å§Ý§Ö§Û §Ù§Ñ§Ó§Ú§ã§Ú§ä §à§ä §ß§Ö§Ü§à§ä§à§â§í§ç §ã§ä§â§å§Ü§ä§å§â §Õ§Ñ§ß§ß§í§ç, §Ü§à§ä§à§â§í§Ö §à§á§â§Ö§Õ§Ö§Ý§Ö§ß§í §Ó §Ù§Ñ§Ô§à§Ý§à§Ó§Ü§Ñ§ç Áú»¢¶Ä²©.

§¯§Ñ§Ú§Ò§à§Ý§Ö§Ö §Ó§Ñ§Ø§ß§í§Û §Ù§Ñ§Ô§à§Ý§à§Ó§à§Ü §Õ§Ý§ñ §á§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§ç §Þ§à§Õ§å§Ý§Ö§Û - include/module.h, §Ü§à§ä§à§â§í§Û §à§á§â§Ö§Õ§Ö§Ý§ñ§Ö§ä §á§Ö§â§Ö§é§Ú§ã§Ý§Ö§ß§ß§í§Ö §Ó§í§ê§Ö §ã§ä§â§å§Ü§ä§å§â§í §Õ§Ñ§ß§ß§í§ç. §¥§â§å§Ô§à§Û §á§à§Ý§Ö§Ù§ß§í§Û §Ù§Ñ§Ô§à§Ý§à§Ó§à§Ü - include/sysinc.h, §Ü§à§ä§à§â§í§Û §Ó§í§á§à§Ý§ß§ñ§Ö§ä §Ó§Ü§Ý§ð§é§Ö§ß§Ú§Ö §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§í§ç §ã§Ú§ã§ä§Ö§Þ§ß§í§ç §Ù§Ñ§Ô§à§Ý§à§Ó§Ü§à§Ó, §Ü§à§ä§à§â§í§Û §ã§Ñ§Þ §á§à §ã§Ö§Ò§Ö §á§à§Þ§à§Ô§Ñ§Ö§ä include/module.h §â§Ñ§Ò§à§ä§Ñ§ä§î §Õ§à§Ý§Ø§ß§í§Þ §à§Ò§â§Ñ§Ù§à§Þ.

§¥§Ý§ñ §ä§à§Ô§à §é§ä§à§Ò§í include/module.h §Ú include/sysinc.h §Ò§í§Ý§Ú §Ó§Ü§Ý§ð§é§Ö§ß§í, §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§à §ã§ß§Ñ§é§Ñ§Ý§Ñ §Ó§í§á§à§Ý§ß§Ú§ä§î §Ü§à§Þ§Ñ§ß§Õ§å ./configure (§Ò§Ö§Ù §Ñ§â§Ô§å§Þ§Ö§ß§ä§à§Ó) §Ú§Ù §Ü§à§â§ß§ñ §Õ§Ö§â§Ö§Ó§Ñ §Ú§ã§ç§à§Õ§ß§í§ç §Ü§à§Õ§à§Ó Áú»¢¶Ä²©. §¬§à§Þ§Ñ§ß§Õ§Ñ §ã§à§Ù§Õ§Ñ§ã§ä include/config.h §æ§Ñ§Û§Ý, §Ü§à§ä§à§â§í§Û §à§ã§ß§à§Ó§í§Ó§Ñ§Ö§ä§ã§ñ §ß§Ñ include/sysinc.h. (§¦§ã§Ý§Ú §Ó§í §á§à§Ý§å§é§Ú§Ý§Ú §Ú§ã§ç§à§Õ§ß§í§Ö §Ü§à§Õ§í Áú»¢¶Ä²© §Ú§Ù §ç§â§Ñ§ß§Ú§Ý§Ú§ë§Ñ Subversion, §ã§Ü§â§Ú§á§ä ./configure §ß§Ö §Ò§å§Õ§Ö§ä §ã§å§ë§Ö§ã§ä§Ó§à§Ó§Ñ§ä§î, §ã§ß§Ñ§é§Ñ§Ý§Ñ §Ó§í§á§à§Ý§ß§Ú§ä§Ö §Ü§à§Þ§Ñ§ß§Õ§å ./bootstrap.sh, §é§ä§à§Ò§í §ã§Ü§â§Ú§á§ä §ã§Ô§Ö§ß§Ö§â§Ú§â§à§Ó§Ñ§Ý§ã§ñ.)

§©§ß§Ñ§ñ §ï§ä§å §Ú§ß§æ§à§â§Þ§Ñ§è§Ú§ð, §Ú§Þ§Ö§Û§ä§Ö §Ó §Ó§Ú§Õ§å, §é§ä§à §Ó§ã§Ö §Ô§à§ä§à§Ó§à §Õ§Ý§ñ §ã§Ò§à§â§Ü§Ú §Þ§à§Õ§å§Ý§ñ. §®§à§Õ§å§Ý§î §Õ§à§Ý§Ø§Ö§ß §Ó§Ü§Ý§ð§é§Ñ§ä§î sysinc.h §Ú module.h, §Ú §ã§Ü§â§Ú§á§ä §ã§Ò§à§â§Ü§Ú §Õ§à§Ý§Ø§Ö§ß §á§à§ß§Ú§Þ§Ñ§ä§î, §é§ä§à §ï§ä§Ú §Õ§Ó§Ñ §æ§Ñ§Û§Ý§Ñ §å§Ü§Ñ§Ù§Ñ§ß§í §Ó include. §³§Þ§à§ä§â§Ú§ä§Ö §á§â§Ú§Þ§Ö§â §Þ§à§Õ§å§Ý§ñ "dummy" §ß§Ú§Ø§Ö §Õ§Ý§ñ §á§à§Ý§å§é§Ö§ß§Ú§ñ §Õ§Ö§ä§Ñ§Ý§Ö§Û.

§¥§â§å§Ô§Ú§Þ §á§à§Ý§Ö§Ù§ß§í§Û §Ù§Ñ§Ô§à§Ý§à§Ó§Ü§à§Þ §ñ§Ó§Ý§ñ§Ö§ä§ã§ñ include/log.h, §Ü§à§ä§à§â§í§Û §à§á§â§Ö§Õ§Ö§Ý§ñ§Ö§ä §æ§å§ß§Ü§è§Ú§ð zabbix_log(), §Ü§à§ä§à§â§å§ð §Þ§à§Ø§ß§à §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Õ§Ý§ñ §Ø§å§â§ß§Ñ§Ý§Ú§â§à§Ó§Ñ§ß§Ú§ñ §Ú §à§ä§Ý§Ñ§Õ§Ü§Ú.

3 §±§Ñ§â§Ñ§Þ§Ö§ä§â§í §Ü§à§ß§æ§Ú§Ô§å§â§Ñ§è§Ú§Ú

Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä, §ã§Ö§â§Ó§Ö§â §Ú §á§â§à§Ü§ã§Ú §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§ð§ä §Õ§Ó§Ñ §á§Ñ§â§Ñ§Þ§Ö§ä§â§Ñ §Õ§Ý§ñ §â§Ñ§Ò§à§ä§í §ã §Þ§à§Õ§å§Ý§ñ§Þ§Ú:

  • LoadModulePath ¨C §á§à§Ý§ß§í§Û §á§å§ä§î §Õ§à §â§Ñ§ã§á§à§Ý§à§Ø§Ö§ß§Ú§ñ §á§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§ç §Þ§à§Õ§å§Ý§Ö§Û
  • LoadModule ¨C §Þ§à§Õ§å§Ý§î(§Ú) §Õ§Ý§ñ §Ù§Ñ§Ô§â§å§Ù§Ü§Ú §á§â§Ú §ã§ä§Ñ§â§ä§Ö. §®§à§Õ§å§Ý§Ú §Õ§à§Ý§Ø§ß§í §ß§Ñ§ç§à§Õ§Ú§ä§î§ã§ñ §Ó §á§Ñ§á§Ü§Ö §å§Ü§Ñ§Ù§Ñ§ß§ß§à§Û §Ó §á§Ñ§â§Ñ§Þ§Ö§ä§â§Ö LoadModulePath §Ú§Ý§Ú §Õ§à §Ú§Þ§Ö§ß§Ú §Þ§à§Õ§å§Ý§ñ §Õ§à§Ý§Ø§Ö§ß §Ò§í§ä§î §å§Ü§Ñ§Ù§Ñ§ß §á§å§ä§î §Ü §Þ§à§Õ§å§Ý§ð. §¦§ã§Ý§Ú §á§å§ä§î §Õ§à §Ú§Þ§Ö§ß§Ú §Þ§à§Õ§å§Ý§ñ §Ñ§Ò§ã§à§Ý§ð§ä§ß§í§Û (§ß§Ñ§é§Ú§ß§Ñ§Ö§ä§ã§ñ §ã '/'), §ä§à§Ô§Õ§Ñ LoadModulePath §Ú§Ô§ß§à§â§Ú§â§å§Ö§ä§ã§ñ. §¥§à§á§å§ã§Ü§Ñ§Ö§ä§ã§ñ §Õ§à§Ò§Ñ§Ó§Ý§ñ§ä§î §ß§Ö§ã§Ü§à§Ý§î§Ü§à §á§Ñ§â§Ñ§Þ§Ö§ä§â§à§Ó LoadModule.

§¯§Ñ§á§â§Ú§Þ§Ö§â, §Õ§Ý§ñ §â§Ñ§ã§ê§Ú§â§Ö§ß§Ú§ñ §Ó§à§Ù§Þ§à§Ø§ß§à§ã§ä§Ö§Û Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä§Ñ §Þ§í §Þ§à§Ø§Ö§Þ §Õ§à§Ò§Ñ§Ó§Ú§ä§î §ã§Ý§Ö§Õ§å§ð§ë§Ú§Ö §á§Ñ§â§Ñ§Þ§Ö§ä§â§í:

LoadModulePath=/usr/local/lib/zabbix/agent/
       LoadModule=mariadb.so
       LoadModule=apache.so
       LoadModule=kernel.so
       LoadModule=/usr/local/lib/zabbix/dummy.so

§±§à§ã§Ý§Ö §Ù§Ñ§á§å§ã§Ü§Ñ §Ñ§Ô§Ö§ß§ä§Ñ §Ò§å§Õ§å§ä §Ù§Ñ§Ô§â§å§Ø§Ö§ß§í §Þ§à§Õ§å§Ý§Ú mariadb.so, apache.so §Ú kernel.so §Ú§Ù §á§Ñ§á§Ü§Ú /usr/local/lib/zabbix/agent, §ä§à§Ô§Õ§Ñ §Ü§Ñ§Ü dummy.so §Ò§å§Õ§Ö§ä §Ù§Ñ§Ô§â§å§Ø§Ö§ß §Ú§Ù /usr/local/lib/zabbix. §¡§Ô§Ö§ß§ä §ß§Ö §Ù§Ñ§á§å§ã§ä§Ú§ä§ã§ñ, §Ö§ã§Ý§Ú §Þ§à§Õ§å§Ý§î §à§ä§ã§å§ä§ã§ä§Ó§å§Ö§ä, §Ý§Ú§Ò§à §Ó §ã§Ý§å§é§Ñ§Ö §ß§Ö§Ü§à§â§â§Ö§Ü§ä§ß§í§ç §á§â§Ñ§Ó §Õ§à§ã§ä§å§á§Ñ §Ú§Ý§Ú §â§Ñ§Ù§Õ§Ö§Ý§ñ§Ö§Þ§Ñ§ñ §Ò§Ú§Ò§Ý§Ú§à§ä§Ö§Ü§Ñ §ß§Ö §ñ§Ó§Ý§ñ§Ö§ä§ã§ñ §Þ§à§Õ§å§Ý§Ö§Þ Áú»¢¶Ä²©.

4 §¯§Ñ§ã§ä§â§à§Û§Ü§Ñ §Ó§Ö§Ò-§Ú§ß§ä§Ö§â§æ§Ö§Û§ã§Ñ

§±§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§Ö §Þ§à§Õ§å§Ý§Ú §á§à§Õ§Ö§â§Ø§Ú§Ó§Ñ§ð§ä§ã§ñ Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä§à§Þ, §ã§Ö§â§Ó§Ö§â§à§Þ §Ú §á§â§à§Ü§ã§Ú. §³§Ý§Ö§Õ§à§Ó§Ñ§ä§Ö§Ý§î§ß§à, §ä§Ú§á §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç §Ó Áú»¢¶Ä²© §Ó§Ö§Ò-§Ú§ß§ä§Ö§â§æ§Ö§Û§ã§Ö §Ù§Ñ§Ó§Ú§ã§Ú§ä §à§ä §ä§à§Ô§à §Ô§Õ§Ö §ï§ä§à§ä §Þ§à§Õ§å§Ý§î §Ù§Ñ§Ô§â§å§Ø§Ö§ß. §¦§ã§Ý§Ú §Þ§à§Õ§å§Ý§î §Ù§Ñ§Ô§â§å§Ø§Ö§ß §ß§Ñ §ã§ä§à§â§à§ß§Ö §Ñ§Ô§Ö§ß§ä§Ñ, §ä§à§Ô§Õ§Ñ §ä§Ú§á §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç §Õ§à§Ý§Ø§Ö§ß §Ò§í§ä§î "Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä" §Ú§Ý§Ú "Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä (§Ñ§Ü§ä§Ú§Ó§ß§í§Û)". §¦§ã§Ý§Ú §Þ§à§Õ§å§Ý§î §Ù§Ñ§Ô§â§å§Ø§Ö§ß §ß§Ñ §ã§ä§à§â§à§ß§Ö §ã§Ö§â§Ó§Ö§â§Ñ §Ú§Ý§Ú §á§â§à§Ü§ã§Ú, §ä§à§Ô§Õ§Ñ §ä§Ú§á §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç §Õ§à§Ý§Ø§Ö§ß §Ò§í§ä§î "§±§â§à§ã§ä§Ñ§ñ §á§â§à§Ó§Ö§â§Ü§Ñ".

§¿§Ü§ã§á§à§â§ä §Ú§ã§ä§à§â§Ú§Ú §é§Ö§â§Ö§Ù §Þ§à§Õ§å§Ý§Ú Áú»¢¶Ä²© §ß§Ö §ä§â§Ö§Ò§å§Ö§ä §Ü§Ñ§Ü§à§Û-§Ý§Ú§Ò§à §ß§Ñ§ã§ä§â§à§Û§Ü§Ú §é§Ö§â§Ö§Ù §Ó§Ö§Ò-§Ú§ß§ä§Ö§â§æ§Ö§Û§ã. §¦§ã§Ý§Ú §Þ§à§Õ§å§Ý§î §å§ã§á§Ö§ê§ß§à §Ù§Ñ§Ô§â§å§Ø§Ö§ß §ã§Ö§â§Ó§Ö§â§à§Þ §Ú §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ý§ñ§Ö§ä §æ§å§ß§Ü§è§Ú§ð zbx_module_history_write_cbs(), §Ü§à§ä§à§â§Ñ§ñ §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§Ö§ä §á§à §Ü§â§Ñ§Û§ß§Ö§Û §Þ§Ö§â§Ö §à§Õ§ß§å §ß§Ö-NULL §æ§å§ß§Ü§è§Ú§ð §à§Ò§â§Ñ§ä§ß§à§Û §ã§Ó§ñ§Ù§Ú, §ä§à§Ô§Õ§Ñ §ï§Ü§ã§á§à§â§ä §Ú§ã§ä§à§â§Ú§Ú §Ò§å§Õ§Ö§ä §Ó§Ü§Ý§ð§é§Ö§ß §Ñ§Ó§ä§à§Þ§Ñ§ä§Ú§é§Ö§ã§Ü§Ú.

5 §±§å§ã§ä§à§Û §Þ§à§Õ§å§Ý§î

Áú»¢¶Ä²© §Ó§Ü§Ý§ð§é§Ñ§Ö§ä §á§â§à§ã§ä§à§Û §Þ§à§Õ§å§Ý§î, §ß§Ñ§á§Ú§ã§Ñ§ß§ß§í§Û §ß§Ñ §ñ§Ù§í§Ü§Ö §³. §®§à§Õ§å§Ý§î §ß§Ñ§ç§à§Õ§Ú§ä§î§ã§ñ §Ó src/modules/dummy:

alex@alex:~trunk/src/modules/dummy$ ls -l
       -rw-rw-r-- 1 alex alex 9019 Apr 24 17:54 dummy.c
       -rw-rw-r-- 1 alex alex   67 Apr 24 17:54 Makefile
       -rw-rw-r-- 1 alex alex  245 Apr 24 17:54 README

§®§à§Õ§å§Ý§î §ç§à§â§à§ê§à §Õ§à§Ü§å§Þ§Ö§ß§ä§Ú§â§à§Ó§Ñ§ß, §à§ß §Þ§à§Ø§ß§à §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Ü§Ñ§Ü §ê§Ñ§Ò§Ý§à§ß §Õ§Ý§ñ §Ó§Ñ§ê§Ú§ç §ã§à§Ò§ã§ä§Ó§Ö§ß§ß§í§ç §Þ§à§Õ§å§Ý§Ö§Û.

§±§à§ã§Ý§Ö §Ó§í§á§à§Ý§ß§Ö§ß§Ú§ñ ./configure §Ó §Ü§à§â§ß§Ö §Õ§Ö§â§Ö§Ó§Ñ §Ú§ã§ç§à§Õ§ß§í§ç §Ü§à§Õ§à§Ó Áú»¢¶Ä²©, §Ü§Ñ§Ü §à§á§Ú§ã§Ñ§ß§à §â§Ñ§ß§Ö§Ö, §á§â§à§ã§ä§à §Ó§í§á§à§Ý§ß§Ú§ä§Ö make §Õ§Ý§ñ §ã§Ò§à§â§Ü§Ú dummy.so.

/*
       ** Áú»¢¶Ä²©
       ** Copyright (C) 2001-2016 Áú»¢¶Ä²© SIA
       **
       ** This program is free software; you can redistribute it and/or modify
       ** it under the terms of the GNU General Public License as published by
       ** the Free Software Foundation; either version 2 of the License, or
       ** (at your option) any later version.
       **
       ** This program is distributed in the hope that it will be useful,
       ** but WITHOUT ANY WARRANTY; without even the implied warranty of
       ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
       ** GNU General Public License for more details.
       **
       ** You should have received a copy of the GNU General Public License
       ** along with this program; if not, write to the Free Software
       ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
       **/
       
       #include "sysinc.h"
       #include "module.h"
       
       /* the variable keeps timeout setting for item processing */
       static int  item_timeout = 0;
       
       /* module SHOULD define internal functions as static and use a naming pattern different from Áú»¢¶Ä²© internal */
       /* symbols (zbx_*) and loadable module API functions (zbx_module_*) to avoid conflicts                       */
       static int  dummy_ping(AGENT_REQUEST *request, AGENT_RESULT *result);
       static int  dummy_echo(AGENT_REQUEST *request, AGENT_RESULT *result);
       static int  dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result);
       
       static ZBX_METRIC keys[] =
       /*  KEY         FLAG        FUNCTION    TEST PARAMETERS */
       {
           {"dummy.ping",      0,      dummy_ping, NULL},
           {"dummy.echo",      CF_HAVEPARAMS,  dummy_echo, "a message"},
           {"dummy.random",    CF_HAVEPARAMS,  dummy_random,   "1,1000"},
           {NULL}
       };
       
       /***
        *                                                                            *
        * Function: zbx_module_api_version                                           *
        *                                                                            *
        * Purpose: returns version number of the module interface                    *
        *                                                                            *
        * Return value: ZBX_MODULE_API_VERSION - version of module.h module is       *
        *               compiled with, in order to load module successfully Áú»¢¶Ä²©   *
        *               MUST be compiled with the same version of this header file   *
        *                                                                            *
        ***/
       int zbx_module_api_version(void)
       {
           return ZBX_MODULE_API_VERSION;
       }
       
       /***
        *                                                                            *
        * Function: zbx_module_item_timeout                                          *
        *                                                                            *
        * Purpose: set timeout value for processing of items                         *
        *                                                                            *
        * Parameters: timeout - timeout in seconds, 0 - no timeout set               *
        *                                                                            *
        ***/
       void    zbx_module_item_timeout(int timeout)
       {
           item_timeout = timeout;
       }
       
       /***
        *                                                                            *
        * Function: zbx_module_item_list                                             *
        *                                                                            *
        * Purpose: returns list of item keys supported by the module                 *
        *                                                                            *
        * Return value: list of item keys                                            *
        *                                                                            *
        ***/
       ZBX_METRIC  *zbx_module_item_list(void)
       {
           return keys;
       }
       
       static int  dummy_ping(AGENT_REQUEST *request, AGENT_RESULT *result)
       {
           SET_UI64_RESULT(result, 1);
       
           return SYSINFO_RET_OK;
       }
       
       static int  dummy_echo(AGENT_REQUEST *request, AGENT_RESULT *result)
       {
           char    *param;
       
           if (1 != request¡únparam)
           {
               /* set optional error message */
               SET_MSG_RESULT(result, strdup("Invalid number of parameters."));
               return SYSINFO_RET_FAIL;
           }
       
           param = get_rparam(request, 0);
       
           SET_STR_RESULT(result, strdup(param));
       
           return SYSINFO_RET_OK;
       }
       
       /***
        *                                                                            *
        * Function: dummy_random                                                     *
        *                                                                            *
        * Purpose: a main entry point for processing of an item                      *
        *                                                                            *
        * Parameters: request - structure that contains item key and parameters      *
        *              request¡úkey - item key without parameters                    *
        *              request¡únparam - number of parameters                        *
        *              request¡útimeout - processing should not take longer than     *
        *                                 this number of seconds                     *
        *              request¡úparams[N-1] - pointers to item key parameters        *
        *                                                                            *
        *             result - structure that will contain result                    *
        *                                                                            *
        * Return value: SYSINFO_RET_FAIL - function failed, item will be marked      *
        *                                 as not supported by zabbix                 *
        *               SYSINFO_RET_OK - success                                     *
        *                                                                            *
        * Comment: get_rparam(request, N-1) can be used to get a pointer to the Nth  *
        *          parameter starting from 0 (first parameter). Make sure it exists  *
        *          by checking value of request¡únparam.                             *
        *                                                                            *
        ***/
       static int  dummy_random(AGENT_REQUEST *request, AGENT_RESULT *result)
       {
           char    *param1, *param2;
           int from, to;
       
           if (2 != request¡únparam)
           {
               /* set optional error message */
               SET_MSG_RESULT(result, strdup("Invalid number of parameters."));
               return SYSINFO_RET_FAIL;
           }
       
           param1 = get_rparam(request, 0);
           param2 = get_rparam(request, 1);
       
           /* there is no strict validation of parameters for simplicity sake */
           from = atoi(param1);
           to = atoi(param2);
       
           if (from > to)
           {
               SET_MSG_RESULT(result, strdup("Invalid range specified."));
               return SYSINFO_RET_FAIL;
           }
       
           SET_UI64_RESULT(result, from + rand() % (to - from + 1));
       
           return SYSINFO_RET_OK;
       }
       
       /***
        *                                                                            *
        * Function: zbx_module_init                                                  *
        *                                                                            *
        * Purpose: the function is called on agent startup                           *
        *          It should be used to call any initialization routines             *
        *                                                                            *
        * Return value: ZBX_MODULE_OK - success                                      *
        *               ZBX_MODULE_FAIL - module initialization failed               *
        *                                                                            *
        * Comment: the module won't be loaded in case of ZBX_MODULE_FAIL             *
        *                                                                            *
        ***/
       int zbx_module_init(void)
       {
           /* initialization for dummy.random */
           srand(time(NULL));
       
           return ZBX_MODULE_OK;
       }
       
       /***
        *                                                                            *
        * Function: zbx_module_uninit                                                *
        *                                                                            *
        * Purpose: the function is called on agent shutdown                          *
        *          It should be used to cleanup used resources if there are any      *
        *                                                                            *
        * Return value: ZBX_MODULE_OK - success                                      *
        *               ZBX_MODULE_FAIL - function failed                            *
        *                                                                            *
        ***/
       int zbx_module_uninit(void)
       {
           return ZBX_MODULE_OK;
       }
       
       /***
        *                                                                            *
        * Functions: dummy_history_float_cb                                          *
        *            dummy_history_integer_cb                                        *
        *            dummy_history_string_cb                                         *
        *            dummy_history_text_cb                                           *
        *            dummy_history_log_cb                                            *
        *                                                                            *
        * Purpose: callback functions for storing historical data of types float,    *
        *          integer, string, text and log respectively in external storage    *
        *                                                                            *
        * Parameters: history     - array of historical data                         *
        *             history_num - number of elements in history array              *
        *                                                                            *
        ***/
       static void dummy_history_float_cb(const ZBX_HISTORY_FLOAT *history, int history_num)
       {
           int i;
       
           for (i = 0; i < history_num; i++)
           {
               /* do something with history[i].itemid, history[i].clock, history[i].ns, history[i].value, ... */
           }
       }
       
       static void dummy_history_integer_cb(const ZBX_HISTORY_INTEGER *history, int history_num)
       {
           int i;
       
           for (i = 0; i < history_num; i++)
           {
               /* do something with history[i].itemid, history[i].clock, history[i].ns, history[i].value, ... */
           }
       }
       
       static void dummy_history_string_cb(const ZBX_HISTORY_STRING *history, int history_num)
       {
           int i;
       
           for (i = 0; i < history_num; i++)
           {
               /* do something with history[i].itemid, history[i].clock, history[i].ns, history[i].value, ... */
           }
       }
       
       static void dummy_history_text_cb(const ZBX_HISTORY_TEXT *history, int history_num)
       {
           int i;
       
           for (i = 0; i < history_num; i++)
           {
               /* do something with history[i].itemid, history[i].clock, history[i].ns, history[i].value, ... */
           }
       }
       
       static void dummy_history_log_cb(const ZBX_HISTORY_LOG *history, int history_num)
       {
           int i;
       
           for (i = 0; i < history_num; i++)
           {
               /* do something with history[i].itemid, history[i].clock, history[i].ns, history[i].value, ... */
           }
       }
       
       /***
        *                                                                            *
        * Function: zbx_module_history_write_cbs                                     *
        *                                                                            *
        * Purpose: returns a set of module functions Áú»¢¶Ä²© will call to export      *
        *          different types of historical data                                *
        *                                                                            *
        * Return value: structure with callback function pointers (can be NULL if    *
        *               module is not interested in data of certain types)           *
        *                                                                            *
        ***/
       ZBX_HISTORY_WRITE_CBS   zbx_module_history_write_cbs(void)
       {
           static ZBX_HISTORY_WRITE_CBS    dummy_callbacks =
           {
               dummy_history_float_cb,
               dummy_history_integer_cb,
               dummy_history_string_cb,
               dummy_history_text_cb,
               dummy_history_log_cb,
           };
       
           return dummy_callbacks;
       }

§®§à§Õ§å§Ý§î §ï§Ü§á§à§â§ä§Ú§â§å§Ö§ä 3 §ß§à§Ó§í§ç §ï§Ý§Ö§Þ§Ö§ß§ä§Ñ §Õ§Ñ§ß§ß§í§ç:

  • dummy.ping - §Ó§ã§Ö§Ô§Õ§Ñ §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§Ö§ä '1'
  • dummy.echo[param1] - §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§Ö§ä §á§Ö§â§Ó§í§Û §á§Ñ§â§Ñ§Þ§Ö§ä§â §Ü§Ñ§Ü §Ö§ã§ä§î, §ß§Ñ§á§â§Ú§Þ§Ö§â, dummy.echo[ABC] §Ó§Ö§â§ß§Ö§ä ABC
  • dummy.random[param1, param2] - §Ó§à§Ù§Ó§â§Ñ§ë§Ñ§Ö§ä §ã§Ý§å§é§Ñ§Û§ß§à§Ö §é§Ú§ã§Ý§à §Ú§Ù §Õ§Ú§Ñ§á§Ñ§Ù§à§ß§Ñ param1-param2, §ß§Ñ§á§â§Ú§Þ§Ö§â, dummy.random[1,1000000]

6 §°§Ô§â§Ñ§ß§Ú§é§Ö§ß§Ú§ñ

§±§à§Õ§Õ§Ö§â§Ø§Ü§Ñ §á§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§ç §Þ§à§Õ§å§Ý§Ö§Û §â§Ö§Ñ§Ý§Ú§Ù§à§Ó§Ñ§ß§Ñ §ä§à§Ý§î§Ü§à §ß§Ñ §á§Ý§Ñ§ä§æ§à§â§Þ§Ñ§ç Unix. §¿§ä§à §à§Ù§ß§Ñ§é§Ñ§Ö§ä, §é§ä§à §á§à§Õ§Ô§â§å§Ø§Ñ§Ö§Þ§í§Û §Þ§à§Õ§å§Ý§î §ß§Ö §â§Ñ§Ò§à§ä§Ñ§Ö§ä §ß§Ñ Áú»¢¶Ä²© §Ñ§Ô§Ö§ß§ä§Ñ§ç §á§à§Õ Windows.

§£ §ß§Ö§Ü§à§ä§à§â§í§ç §ã§Ý§å§é§Ñ§ñ§ç §Þ§à§Õ§å§Ý§ð §Þ§à§Ø§Ö§ä §á§à§ä§â§Ö§Ò§à§Ó§Ñ§ä§î§ã§ñ §á§â§à§é§Ú§ä§Ñ§ä§î §á§Ñ§â§Ñ§Þ§Ö§ä§â§í §Ú§Þ§Ö§ð§ë§Ú§Ö §à§ä§ß§à§ê§Ö§ß§Ú§ñ §Ü §Þ§à§Õ§å§Ý§ð §Ú§Ù zabbix_agentd.conf. §£ §ß§Ñ§ã§ä§à§ñ§ë§Ö§Ö §Ó§â§Ö§Þ§ñ §ï§ä§à§ä §æ§å§ß§Ü§è§Ú§à§ß§Ñ§Ý §ß§Ö §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§ä§ã§ñ. §¦§ã§Ý§Ú §Ó§Ñ§Þ §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§à §Ó §Ó§Ñ§ê§Ö§Þ §Þ§à§Õ§å§Ý§Ö §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §ß§Ö§Ü§à§ä§à§â§í§Ö §á§Ñ§â§Ñ§Þ§Ö§ä§â§í §Ü§à§ß§æ§Ú§Ô§å§â§Ñ§è§Ú§Ú §Ó§Ñ§Þ, §Ó§à§Ù§Þ§à§Ø§ß§à, §ã§Ý§Ö§Õ§å§Ö§ä §à§ã§å§ë§Ö§ã§ä§Ó§Ý§ñ§ä§î §Ñ§ß§Ñ§Ý§Ú§Ù §à§ä§Õ§Ö§Ý§î§ß§à§Ô§à §æ§Ñ§Û§Ý§Ñ §Ü§à§ß§æ§Ú§Ô§å§â§Ñ§è§Ú§Ú §Þ§à§Õ§å§Ý§ñ.