Как вы связываете схему с полезной нагрузкой? - PullRequest
0 голосов
/ 03 мая 2019

Для контекста: Я настраиваю PubSub Emitter для снегоочистителя. (Для других читателей PubSub - это простая очередь на облачных платформах Google, которая принимает сообщения, являющиеся массивом входных данных).

['data' => 'Name', 'attributes' => 'key pair values of whatever data you are sending']

Вышеприведенное не имеет значения, за исключением того, что для достижения этой цели я должен создать собственный класс Emitter, поскольку в Google Cloud PubSub есть несколько соединителей, отличных от стереотипных http-запросов / сокетов / других, которые предоставляет снегоочиститель.

Актуальная проблема:

Я хочу установить конкретную схему для каждого отправляемого события. Как вы связываете схему с каждой полезной нагрузкой?

PHP Tracker SyncEmitter (самый стандартный снегоочиститель, предоставляемый Emitter) не допускает никаких пользовательских настроек для схемы (как показано ниже)

private function getPostRequest($buffer) {
    $data = array("schema" => self::POST_REQ_SCEHMA, "data" => $buffer);
    return $data;
}

Он жестко запрограммирован в каждом отслеживаемом событии.

Итак, я исследовал. И почитайте о снегоочистителях немного больше. Я все еще сбит с толку, и я знаю, что могу расширить класс Payload и заставить свои собственные схемы использовать в качестве переменной, но почему это уже не так? Я спрашиваю, потому что я предполагаю, что программист с открытым исходным кодом сделал это правильно, и я не понимаю это правильно.

1 Ответ

0 голосов
/ 03 мая 2019

Я понял это.

Класс Tracker содержит trackUnstructuredEvent:

/**
 * Tracks an unstructured event with the aforementioned metrics
 *
 * @param array $event_json - The properties of the event. Has two fields:
 *                           - A "data" field containing the event properties and
 *                           - A "schema" field identifying the schema against which the data is validated
 * @param array|null $context - Event Context
 * @param int|null $tstamp - Event Timestamp
 */
public function trackUnstructEvent($event_json, $context = NULL, $tstamp = NULL) {
    $envelope = array("schema" => self::UNSTRUCT_EVENT_SCHEMA, "data" => $event_json);
    $ep = new Payload($tstamp);
    $ep->add("e", "ue");
    $ep->addJson($envelope, $this->encode_base64, "ue_px", "ue_pr");
    $this->track($ep, $context);
}

Который принимает схему в качестве входных данных. Snowplow хочет, чтобы вы использовали функцию по умолчанию для трекера, и предоставил вышеуказанное в качестве решения моей проблемы.

Но у него все еще есть схема, обернутая вокруг данных (которая содержит схему ввода) .... Больше вопросов из моего собственного ответа ...

...