PageRenderTime 52ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/application/models/SolrError.php

https://github.com/sashafr/open-context-code
PHP | 148 lines | 98 code | 43 blank | 7 comment | 6 complexity | 67b0c18009aaa76840a87c2959faa01d MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /*
  3. This class monitors IP addresses to limit requests to keep the
  4. API from being over used
  5. */
  6. class SolrError {
  7. public $db;
  8. public $requestParams;
  9. const publishEmail = "publish@opencontext.org";
  10. const waitSeconds = 7200 ; // 7200 number of seconds to wait between emails 7200 is 2 hours
  11. //initiallize the database
  12. public function initialize($requestParams, $db = false){
  13. $this->requestParams = $requestParams;
  14. if(!$db){
  15. $db_params = OpenContext_OCConfig::get_db_config();
  16. $db = new Zend_Db_Adapter_Pdo_Mysql($db_params);
  17. $db->getConnection();
  18. }
  19. $this->db = $db;
  20. $this->record_error();
  21. }
  22. public function record_error(){
  23. $db = $this->db;
  24. $requestParams = $this->requestParams;
  25. $sql = "SELECT * FROM dataset_errors WHERE type = 'solr' ORDER BY time DESC LIMIT 1;";
  26. $result = $db->fetchAll($sql, 2);
  27. if($result){
  28. $lastPHPtime = $result[0]["phpTime"];
  29. $currentTime = microtime(true);
  30. $elapsedTime = $currentTime - $lastPHPtime;
  31. if($elapsedTime >= self::waitSeconds){
  32. $this->register_new_error();
  33. }
  34. }
  35. else{
  36. $this->register_new_error();
  37. }
  38. $db->closeConnection();
  39. }//end function
  40. public function restartSolr($solrDir = "/var/www/oc-solr-3-6-2/example"){
  41. $commandString = "cd $solrDir/example;rm nohup.out;killall -9 java;nohup java -jar start.jar &;";
  42. shell_exec($commandString);
  43. }
  44. //indicate the requester new IP address, the URL, and the time
  45. public function register_new_error(){
  46. $host = OpenContext_OCConfig::get_host_config();
  47. $db = $this->db;
  48. $requestParams = $this->requestParams;
  49. $JSONrequest = Zend_Json::encode($requestParams);
  50. $data = array("type" => "solr",
  51. "phpTime" => microtime(true),
  52. "note" => $JSONrequest
  53. );
  54. $outcome = true;
  55. try{
  56. $db->insert("dataset_errors", $data);
  57. }
  58. catch(Exception $e){
  59. $outcome = false;
  60. }
  61. $mail = new Zend_Mail();
  62. try {
  63. $requestIP = false;
  64. if ( isset($_SERVER["REMOTE_ADDR"]) ) {
  65. $requestIP = '' . $_SERVER["REMOTE_ADDR"] . ' ';
  66. } elseif ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ) {
  67. $requestIP = '' . $_SERVER["HTTP_X_FORWARDED_FOR"] . ' ';
  68. } elseif ( isset($_SERVER["HTTP_CLIENT_IP"]) ) {
  69. $requestIP = '' . $_SERVER["HTTP_CLIENT_IP"] . ' ';
  70. }
  71. $emailBody = "CRAP! Solr is not responding to a ping from request: ".chr(13);
  72. $emailBody .= $host.$_SERVER["REQUEST_URI"];
  73. $emailBody .= chr(13).chr(13);
  74. $emailBody .= "Client IP address: ".$requestIP.chr(13).chr(13);
  75. $emailBody .= chr(13).chr(13);
  76. $emailBody .= $JSONrequest;
  77. $configMail = array('auth' => 'login',
  78. 'username' => OpenContext_OCConfig::get_PublishUserName(true),
  79. 'password' => OpenContext_OCConfig::get_PublishPassword(true), 'port' => 465, 'ssl' => 'ssl');
  80. $transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $configMail);
  81. $mail->setBodyText($emailBody);
  82. $mail->setFrom(((OpenContext_OCConfig::get_PublishUserName(true)).'@gmail.com'), 'Open Context Publishing');
  83. $mail->addHeader('Reply-To', 'publish@opencontext.org');
  84. $mail->addHeader('X-Mailer', 'PHP/' . phpversion());
  85. $mail->addTo("kansaeric@gmail.com", "Open Context Admin");
  86. $mail->addCc('skansa@alexandriaarchive.org', 'Sarah Kansa');
  87. $mail->addBcc('kansaeric@gmail.com', 'Eric Kansa');
  88. $mail->setSubject('Open Context Solr Search Down!');
  89. $mail->send($transport);
  90. $this->mailError = "";
  91. } catch (Zend_Exception $e) {
  92. //echo $e;
  93. }
  94. return $outcome;
  95. }
  96. function security_check($input){
  97. $badArray = array("DROP", "SELECT", "#", "--", "DELETE", "INSERT", "UPDATE", "ALTER", "=");
  98. foreach($badArray as $bad_word){
  99. if(stristr($input, $bad_word) != false){
  100. $input = str_ireplace($bad_word, "XXXXXX", $input);
  101. }
  102. }
  103. return $input;
  104. }
  105. }