public function event($title, $text, array $optionalMetadatas = array())
 {
     static $validOptionalMetadatas = ['d' => 'date_happened', 'h' => 'hostname', 'k' => 'aggregation_key', 'p' => 'priority', 's' => 'source_type_name', 't' => 'alert_type', '#' => 'tags'];
     static $validLongOptionalMetadatas = array();
     if (!$validLongOptionalMetadatas) {
         $validLongOptionalMetadatas = array_flip($validOptionalMetadatas);
     }
     $datagram = '_e{' . strlen($title) . ',' . strlen($text) . '}:' . $title . '|' . $text;
     foreach ($optionalMetadatas as $optionalMetadataKey => $optionalMetadata) {
         if (!isset($validOptionalMetadatas[$optionalMetadataKey]) && !isset($validLongOptionalMetadatas[$optionalMetadataKey])) {
             throw new \InvalidArgumentException("They key name provided {$optionalMetadataKey} is not supported");
         }
         $key = strlen($optionalMetadataKey) == 1 ? $optionalMetadataKey : $validLongOptionalMetadatas[$optionalMetadataKey];
         switch ($key) {
             case 'd':
                 if (!is_numeric($optionalMetadata)) {
                     throw new \InvalidArgumentException('date_happened must be a number');
                 }
                 break;
             case 'h':
             case 'k':
             case 's':
                 if (strlen($optionalMetadata) > 0) {
                     throw new \InvalidArgumentException("{$validOptionalMetadatas[$key]} must be a string");
                 }
                 break;
             case 'p':
                 if (!in_array($optionalMetadata, ['normal', 'low'])) {
                     throw new \InvalidArgumentException('priority must be one of "normal" or "low"');
                 }
                 break;
             case 't':
                 if (!in_array($optionalMetadata, ['error', 'warning', 'info', 'success'])) {
                     throw new \InvalidArgumentException('alert_type must be one of "error", "warning", "info", or "success"');
                 }
                 break;
             case '#':
                 if (is_array($optionalMetadata)) {
                     $datagramTags = [];
                     foreach ($optionalMetadata as $i => $tag) {
                         if (is_array($tag)) {
                             $datagramTags[] = array_keys($tag)[0] . ":" . array_values($tag)[0];
                         } elseif (is_string($i) && !is_numeric($i)) {
                             $datagramTags[] = $i . ':' . $tag;
                         } else {
                             $datagramTags[] = $tag;
                         }
                     }
                     $optionalMetadata = implode(",", $datagramTags);
                 }
                 break;
         }
         $datagram .= "|{$key}:{$optionalMetadata}";
     }
     $this->sender->send($datagram);
 }
Example #2
0
 /**
  * 发送验证码
  * @param string $mobile
  * @param string $bag
  */
 public function send($mobile, $bag = 'default')
 {
     // 取缓存
     $code = $this->getCodeFromCache($mobile, $bag, function () use($mobile, $bag) {
         $code = $this->generateCode();
         // 保存缓存, 在这儿缓存, 有效期按第一次发送时开始计时
         $this->putCodeToCache($mobile, $code, $bag);
         return $code;
     });
     return $this->sender->send($mobile, $this->buildCodeMessage($code));
 }