Chuyển tới nội dung chính
Version: 4.1

Trình xử lý sự kiện

Trình xử lý sự kiện là một script bạn viết mà panel chạy khi có điều gì đó xảy ra trên máy chủ. Đây là cách một công ty hosting kết nối HiTechCloud với những hệ thống khác họ đang chạy — hệ thống tính phí phải bắt đầu tính tiền cho một tên miền mới, CRM phải biết một tài khoản đã bị đóng, bảng tính quản lý cấp phát mà ai đó vẫn còn giữ.

Trình xử lý nằm trong một thư mục riêng cho mỗi sự kiện:

/etc/hitechcloud/hitechcloud/events/<event>.d/

Chạy lệnh này một lần để tạo mọi thư mục:

hitechcloudcli event dirs
hitechcloudcli event list

Mọi tệp thực thi được trong thư mục của một sự kiện sẽ chạy khi sự kiện đó xảy ra, dưới quyền root, theo thứ tự tên tệp. Tệp không thực thi được bị bỏ qua, đây là cách tạm cất một trình xử lý mà không phải xoá nó.

Sự kiện và các trường của chúng​

Mọi trình xử lý đều nhận ba biến sau, bất kể sự kiện nào:

BiếnÝ nghĩa
HITECHCLOUD_EVENTTên sự kiện
HITECHCLOUD_EVENT_TIMEUTC, RFC 3339
HITECHCLOUD_EVENT_IDDuy nhất cho mỗi lần phát — dùng nó để trình xử lý có tính lũy đẳng

Và các trường sau theo từng sự kiện:

Sự kiệnCác trường
domain.createdDOMAIN, USER, DOCROOT, PHP_VERSION
domain.deletedDOMAIN, USER
account.createdUSER, EMAIL, PLAN_ID, OWNER
account.deletedUSER, CONTEXT
account.suspendedUSER
account.unsuspendedUSER
plan.changedUSER, PLAN, PREVIOUS_PLAN, PLAN_ID, CPU, RAM, DISK
backup.finishedKIND, STATUS (ok or incomplete), ARCHIVE, SIZE, WARNINGS, DESTINATION
certificate.renewedDOMAIN, USER, DAYS_VALID
service.restartedSERVICE, UNIT, RESULT (ok, failed or exhausted)
uptime.changedDOMAIN, USER, STATE, PREVIOUS_STATE, REASON
anomaly.detectedUSER, KIND, DETAIL

Mỗi trường được truyền dưới dạng HITECHCLOUD_<FIELD> — domain thành HITECHCLOUD_DOMAIN.

Ví dụ​

/etc/hitechcloud/hitechcloud/events/domain.created.d/10-billing:

#!/bin/bash
# Tell the billing system a domain was added. Values arrive in the
# environment; never put one on a command line without quoting it - a domain
# name is text a customer chose.
curl --silent --max-time 20 \
--header "Authorization: Bearer ${BILLING_TOKEN}" \
--data-urlencode "domain=${HITECHCLOUD_DOMAIN}" \
--data-urlencode "account=${HITECHCLOUD_USER}" \
--data-urlencode "event_id=${HITECHCLOUD_EVENT_ID}" \
https://billing.example.com/api/hosting/domain-added
chmod +x /etc/hitechcloud/hitechcloud/events/domain.created.d/10-billing

Kiểm tra mà không cần chờ một tên miền thật:

hitechcloudcli event test domain.created domain=test.example.com user=bob

test chạy các trình xử lý ở tiền cảnh và hiển thị kết quả cùng mã thoát của chúng. Một sự kiện thật chạy chúng tách rời, và kết quả của chúng được ghi vào /var/log/hitechcloud/admin/events.log:

hitechcloudcli event log

Những gì bạn có thể tin cậy​

Trình xử lý không thể làm thao tác thất bại. Sự kiện được phát tách rời, và việc phát luôn thành công. Một lần tạo tài khoản chỉ thành công một nửa vì webhook tính phí bị sập còn tệ hơn một hệ thống tính phí tạm thời chưa cập nhật.

Trình xử lý bị treo sẽ bị kết thúc sau 60 giây. Nếu không, trình xử lý đầu tiên gọi tới một endpoint không liên lạc được sẽ để lại một tiến trình root sau mỗi sự kiện, mãi mãi.

Giá trị không bao giờ tới shell. Chúng được truyền qua biến môi trường, không bao giờ được chèn vào dòng lệnh và không bao giờ đi qua eval. Tên miền là văn bản do khách hàng chọn, và các script này chạy dưới quyền root.

Thứ tự là thứ tự tên tệp. Thêm tiền tố số nếu một trình xử lý phải chạy trước trình xử lý khác.

Các thư mục sự kiện có quyền 700 và các script trong đó chạy dưới quyền root. Bất cứ thứ gì ghi được vào đó đều có thể chạy bất cứ thứ gì trên máy chủ này. Đừng nới lỏng các quyền đó, và đừng đặt trình xử lý trong thư mục mà một tài khoản hosting ghi được.

So sánh với hook của CLI​

hitechcloudcli cũng hỗ trợ các script pre_<command> và post_<command> trong /etc/hitechcloud/hitechcloud/hooks/. Chúng gắn với tên một lệnh CLI và nhận argv của lệnh đó, nên một trình xử lý cho "một tên miền đã được tạo" phải biết rằng domains-add nhận tên người dùng ở vị trí thứ ba và tên miền ở vị trí thứ tư, và sẽ hỏng vào ngày thứ tự đó thay đổi. Chúng cũng không thể kích hoạt cho bất cứ điều gì không đi qua CLI.

Sự kiện gắn với điều đã xảy ra và mang các trường có tên. Hãy ưu tiên dùng chúng cho mọi thứ mà một hệ thống bên ngoài phụ thuộc vào.

Trang này có hữu ích không?