示例#1
0
 public function topValue(array $params)
 {
     $data = KillModel::find()->sort(array("totalISKValue" => -1))->limit(12);
     $items = array();
     foreach ($data as $item) {
         $items[] = $item;
     }
     return $this->render("top/iskvalue.html", array("data" => $items));
 }
示例#2
0
 /**
  * Experimental task to enable kill processing from queue.
  * @param array $options
  */
 public function stomp_process_queue(array $options)
 {
     $this->cli->header("Starting Stomp Import");
     $reg = Registry::getInstance();
     $log = $reg->getLogger();
     $stompcfg = $reg->stomp;
     if (is_null($stompcfg) || !is_array($stompcfg)) {
         $this->cli->error("stomp is not configured, see config.php for details");
         $log->critical("stomp not configured, exiting");
         return;
     }
     $stomp = new \Stomp($stompcfg['url'], $stompcfg['user'], $stompcfg['passwd']);
     // destination has the destination topic (for example /topic/kills)
     $destination = $reg->stomp['destination_read'];
     // we subscribe with additional parameters
     $stomp->subscribe($destination, array("id" => $reg->stomp['dsub_id'], "persistent" => "true", "ack" => "client", "prefetch-count" => 1));
     while (true) {
         try {
             if (!$stomp->hasFrame()) {
                 continue;
             }
             $frame = $stomp->readFrame();
             if ($frame) {
                 $log->debug("received frame with message-id: " . $frame->headers['message-id']);
                 $killdata = json_decode($frame->body, true);
                 $existing = Kill::getByKillId($killdata["killID"]);
                 if (!is_null($existing)) {
                     $log->debug($frame->headers['message-id'] . '::' . $killdata["killID"] . " kill by killID exists");
                     $stomp->ack($frame);
                     continue;
                 }
                 try {
                     $apiParser = new EveAPI();
                     $apiParser->parseKill($killdata);
                     $log->debug($frame->headers['message-id'] . '::' . $killdata["killID"] . " saved");
                     $stomp->ack($frame);
                 } catch (\Exception $e) {
                     $log->error($frame->headers['message-id'] . "could not be saved, exception: " . $e->getMessage());
                 }
             }
         } catch (\StompException $e) {
             $log->error("there was some kind of error with stomp: " . $e->getMessage());
             $log->info("going to sleep for 10, retrying then");
             // we have a stomp exception here most likely that means that the server died.
             // so we are going to sleep for a bit and retry
             sleep(10);
             // replace stomp connection by new one
             // @todo: check if that might cause open connections not to close over time
             unset($stomp);
             $stomp = new \Stomp($stompcfg['url'], $stompcfg['user'], $stompcfg['passwd']);
             $stomp->subscribe($destination, array("id" => $reg->stomp['dsub_id'], "persistent" => "true", "ack" => "client", "prefetch-count" => 1));
             $log->info("stomp process retrying");
         }
     }
 }
示例#3
0
 public function victims(array $parameters)
 {
     $term = $_GET['term'];
     // at least 4 characters here or that will get quite slow
     if (strlen($term) < 4) {
         echo json_encode(array());
         return;
     }
     $result = \Kingboard\Model\Kill::find(array('victim.characterName' => new \MongoRegex('/^' . $term . '.*/i')), array('victim.characterName' => 1))->limit(50);
     $names = array();
     foreach ($result as $res) {
         $names[$res['victim']['characterName']] = true;
     }
     $names = array_keys($names);
     echo json_encode($names);
 }
示例#4
0
 private static function findKills(BattleSettings $battleSetting)
 {
     return \Kingboard\Model\Kill::find(array("killTime" => array('$gt' => $battleSetting->startdate, '$lt' => $battleSetting->enddate), "location.solarSystem" => $battleSetting->system, '$or' => array(array("involvedCharacters" => array('$in' => array_merge(array_keys($battleSetting->positives), array((int) $battleSetting->ownerCorporation)))), array("involvedCorporations" => array('$in' => array_merge(array_keys($battleSetting->positives), array((int) $battleSetting->ownerCorporation)))), array("involvedAlliances" => array('$in' => array_merge(array_keys($battleSetting->positives), array((int) $battleSetting->ownerCorporation)))), array("involvedFactions" => array('$in' => array_merge(array_keys($battleSetting->positives), array((int) $battleSetting->ownerCorporation)))))), array("killID" => 1, "solarSystemID" => 1, "killTime" => 1, "moonID" => 1, "victim" => 1, "location" => 1));
 }
示例#5
0
 public function index(array $params)
 {
     $context = array();
     if (!isset($params['date'])) {
         $context["date"] = date("Y-m-d");
     } else {
         $context["date"] = $params['date'];
     }
     // get previous day
     $dt = new DateTime($context['date']);
     $context["previousDate"] = date("Y-m-d", $dt->sub(new \DateInterval("P1D"))->getTimestamp());
     $dt = new DateTime($context['date']);
     $ts = $dt->add(new \DateInterval("P1D"))->getTimestamp();
     if ($ts < time()) {
         $context["nextDate"] = date("Y-m-d", $ts);
     } else {
         $context["nextDate"] = date("Y-m-d");
     }
     if (!isset($params['page']) || empty($params['page'])) {
         $page = 1;
     } else {
         $page = (int) $params['page'];
     }
     // reset date
     $dt = new DateTime($context['date']);
     $mdt = new MongoDate($dt->getTimestamp());
     if ($this->_context['ownerID']) {
         $stats = KillsByDayByEntity::findOne($dt->getTimestamp(), $this->_context['ownerID']);
     } else {
         $stats = KillsByDay::findOne($mdt);
     }
     $context['stats'] = $stats['value'];
     $paginator = new Paginator($page, $context['stats']['total']);
     $context['page'] = $paginator->getNavArray();
     // reset date
     $dt = new DateTime($context['date']);
     if ($this->_context['ownerID']) {
         switch ($this->_context['ownerType']) {
             case "alliance":
                 $involvedType = "involvedAlliances";
                 break;
             case "faction":
                 $involvedType = "involvedFactions";
                 break;
             case "corp":
             case "corporation":
                 $involvedType = "involvedCorporations";
                 break;
             case "char":
             case "character":
             case "pilot":
                 $involvedType = "involvedCharacters";
                 break;
             default:
                 throw new \Exception("Configuration has set unknown ownerType!");
                 return;
         }
         $kills = KillModel::find(array('$and' => array(array("killTime" => array('$gt' => new MongoDate($dt->getTimestamp()))), array("killTime" => array('$lt' => new MongoDate($dt->add(new \DateInterval("P1D"))->getTimestamp()))), array($involvedType => $this->_context['ownerID']))))->hint(array("killTime" => 1))->sort(array("killTime" => -1))->skip($paginator->getSkip())->limit(10);
     } else {
         $kills = KillModel::find(array('$and' => array(array("killTime" => array('$gt' => new MongoDate($dt->getTimestamp()))), array("killTime" => array('$lt' => new MongoDate($dt->add(new \DateInterval("P1D"))->getTimestamp()))))))->hint(array("killTime" => 1))->sort(array("killTime" => -1))->skip($paginator->getSkip())->limit(10);
     }
     $context['kills'] = $kills;
     $context['action'] = "/day/" . $context['date'];
     $dt = new DateTime($context['date']);
     $criteria = array('$and' => array(array("startdate" => array('$gt' => new MongoDate($dt->getTimestamp() - 1))), array("startdate" => array('$lt' => new MongoDate($dt->add(new \DateInterval("P1D"))->getTimestamp())))));
     if ($this->_context['ownerID']) {
         $criteria['$or'] = array(array("ownerCharacter" => $this->_context['ownerID']), array("ownerCorporation" => $this->_context['ownerID']), array("ownerAlliance" => $this->_context['ownerID']), array("ownerFaction" => $this->_context['ownerID']));
     }
     $battles = BattleSettings::find($criteria);
     // resolve collection to avoid count() of doom
     $context["battles"] = array();
     foreach ($battles as $battle) {
         $context["battles"][] = $battle->toArray();
     }
     $this->render("date/daily.html", $context);
 }
示例#6
0
 /**
  * get kills for the criteria this list obeys
  * @param int $skip
  * @param int $killsPerPage
  * @return \King23\Mongo\MongoResult
  */
 public function getKills($skip, $killsPerPage)
 {
     return \Kingboard\Model\Kill::find($this->criteria)->sort(array('killTime' => -1))->skip($skip)->limit($killsPerPage);
 }
示例#7
0
 /**
  * parse an kill array, add all necessary data and safe
  * @param array $kill
  * @throws \Exception
  * @return bool
  */
 public function parseKill($kill)
 {
     $qtyDropped = 0;
     $qtyDestroyed = 0;
     $valueDropped = 0;
     $valueDestroyed = 0;
     // this needs to be run before exit of loop, otherwise having all kills of this run
     // will cause the lastID not being updated
     if (!isset($kill['killID']) || is_null($kill['killID']) || $kill['killID'] < 1) {
         throw new \Exception("no valid killID set");
     }
     $killdata = $kill;
     // the kill needs some additional data
     // convert killID to int
     $killdata['killID'] = (int) $killdata['killID'];
     // location data
     $killdata['location'] = array("solarSystem" => EveSolarSystem::getBySolarSystemId($kill['solarSystemID'])->itemName, "security" => EveSolarSystem::getBySolarSystemId($kill['solarSystemID'])->security, "region" => EveSolarSystem::getBySolarSystemId($kill['solarSystemID'])->Region['itemName']);
     // killtime conversion to Mongo
     $killdata['killTime'] = new \MongoDate(strtotime($kill['killTime']));
     // victim conversions / additional data
     $killdata['victim']['characterID'] = (int) $this->ensureEveEntityID($kill['victim']['characterID'], $kill['victim']['characterName']);
     $killdata['victim']['corporationID'] = (int) $this->ensureEveEntityID($kill['victim']['corporationID'], $kill['victim']['corporationName']);
     $killdata['victim']['allianceID'] = (int) $kill['victim']['allianceID'];
     $killdata['victim']['factionID'] = (int) $kill['victim']['factionID'];
     $killdata['victim']['shipTpyeID'] = (int) $kill['victim']['shipTypeID'];
     $killdata['victim']['shipType'] = EveItem::getByItemId($kill['victim']['shipTypeID'])->typeName;
     $killdata['victim']['iskValue'] = EveITem::getItemValue($kill['victim']['shipTypeID']);
     //  add victim to involveds
     $involvedCharacters = array((int) $killdata["victim"]["characterID"]);
     $involvedCorporations = array((int) $killdata["victim"]["corporationID"]);
     if ($killdata['victim']['allianceID'] > 0) {
         $involvedAlliances = array((int) $killdata["victim"]["allianceID"]);
     } else {
         $involvedAlliances = array();
     }
     if ($killdata['victim']['factionID'] > 0) {
         $involvedFactions = array((int) $killdata["victim"]["factionID"]);
     } else {
         $involvedFactions = array();
     }
     // Karbos ISK Value
     $totalISKValue = EveItem::getItemValue($kill['victim']['shipTypeID']);
     foreach ($kill['attackers'] as $id => $attacker) {
         $killdata['attackers'][$id]['characterID'] = (int) $this->ensureEveEntityId($attacker['characterID'], $attacker['characterName']);
         $killdata['attackers'][$id]['corporationID'] = (int) $this->ensureEveEntityID($attacker['corporationID'], $attacker['corporationName']);
         $killdata['attackers'][$id]['allianceID'] = (int) $attacker['allianceID'];
         $killdata['attackers'][$id]['factionID'] = (int) $attacker['factionID'];
         $killdata['attackers'][$id]['weaponTypeID'] = (int) $attacker['weaponTypeID'];
         $killdata['attackers'][$id]['weaponType'] = EveItem::getByItemId($attacker['weaponTypeID'])->typeName;
         $killdata['attackers'][$id]['shipTypeID'] = (int) $attacker['shipTypeID'];
         $killdata['attackers'][$id]['shipType'] = EveItem::getByItemId($attacker['shipTypeID'])->typeName;
         // add involveds
         if (!in_array($attacker['characterID'], $involvedCharacters) && $attacker['characterID'] > 0) {
             $involvedCharacters[] = (int) $attacker['characterID'];
         }
         if (!in_array($attacker['corporationID'], $involvedCorporations) && $attacker['corporationID'] > 0) {
             $involvedCorporations[] = (int) $attacker['corporationID'];
         }
         if (!in_array($attacker['allianceID'], $involvedAlliances) && $attacker['allianceID'] > 0) {
             $involvedAlliances[] = (int) $attacker['allianceID'];
         }
         if (!in_array($attacker['factionID'], $involvedFactions) && $attacker['factionID'] > 0) {
             $involvedFactions[] = (int) $attacker['factionID'];
         }
     }
     if (@(!is_null($kill['items']))) {
         foreach ($kill['items'] as $id => $item) {
             $item = $this->parseItem($item);
             $killdata['items'][$id] = $item;
             $totalISKValue += $item["iskValue"];
             $qtyDropped += $item["qtyDropped"];
             $valueDropped += $item["iskValue"];
             $qtyDestroyed += $item["qtyDestroyed"];
             $valueDestroyed += $item["iskValue"];
         }
     }
     $killdata["involvedCorporations"] = $involvedCorporations;
     $killdata["involvedAlliances"] = $involvedAlliances;
     $killdata["involvedCharacters"] = $involvedCharacters;
     $killdata["involvedFactions"] = $involvedFactions;
     $killdata['totalISKValue'] = $totalISKValue;
     $killdata['totalDropped'] = $qtyDropped;
     $killdata['totalDestroyed'] = $qtyDestroyed;
     $killdata['totalISKDropped'] = $valueDropped;
     $killdata['totalISKDestroyed'] = $valueDestroyed;
     if (is_null(Kill::getByKillId($killdata['killID']))) {
         $killObject = new Kill();
         $killObject->injectDataFromMail($killdata);
         $killObject->save();
         return true;
     } else {
         return false;
     }
 }
示例#8
0
 public function json($request)
 {
     $kill = \Kingboard\Model\Kill::getByKillId($request['killID']);
     echo json_encode($kill->toArray());
 }