lily.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. require_once __DIR__ . '/vendor/autoload.php';
  3. require_once __DIR__ . '/lib/lily/Tex.php';
  4. require_once __DIR__ . '/lib/lily/TexToPdfTask.php';
  5. use Monolog\Level;
  6. use Monolog\Logger;
  7. use Monolog\Handler\StreamHandler;
  8. use Thrift\Serializer\TBinarySerializer;
  9. use PhpAmqpLib\Connection\AMQPStreamConnection;
  10. use PhpAmqpLib\Message\AMQPMessage;
  11. use lily\Tex;
  12. use lily\TexToPdfTask;
  13. function publish_tex_to_pdf($logger, $channel, $queue, $callback)
  14. {
  15. $task = new TexToPdfTask();
  16. $task->bucket = "testing";
  17. $task->object = date("Y-m-d") . '.pdf';
  18. $task->callback = $callback;
  19. $task->tex = new Tex();
  20. $task->tex->homepage = <<<TEX
  21. \\documentclass{article}
  22. \\begin{document}
  23. \\title{The title \\thanks{With footnote}}
  24. \\auhtor{me}
  25. \\date{\\today}
  26. \\maketitle
  27. \\include{vocabulary/session-1.tex}
  28. \\include{vocabulary/session-2.tex}
  29. \\include{vocabulary/session-3.tex}
  30. \\end {document}
  31. TEX;
  32. $task->tex->files = array(
  33. "section-1.tex" => <<<TEX
  34. \\section{Session 1}
  35. TEX,
  36. "section-2.tex" => <<<TEX
  37. \\section{Session 2}
  38. \\First\\footnote{First note}
  39. \\Second\\footnote{Second note}
  40. \\Third\\footnote{Third note}
  41. TEX,
  42. "section-3.tex" => <<<TEX
  43. \\section{Session 3}
  44. TEX,
  45. );
  46. $body = TBinarySerializer::serialize($task);
  47. $message_id = uniqid();
  48. $logger->debug("publish a tex-to-pdf task(" . strlen($body) . "bytes) " . $message_id);
  49. // https://github.com/php-amqplib/php-amqplib/blob/master/doc/AMQPMessage.md
  50. $message = new AMQPMessage($body, ['message_id' => $message_id]);
  51. $channel->basic_publish($message, '', $queue);
  52. }
  53. $logger = new Logger('lily');
  54. $logger->pushHandler(new StreamHandler('php://stdout', Level::Debug));
  55. $logger->debug("run on debug mode");
  56. if ($argc !== 2) {
  57. $logger->error("usage: php $argv[0] config.yml");
  58. exit(1);
  59. }
  60. $logger->debug("$argc");
  61. $logger->info("load config from" . $argv[1]);
  62. $config = yaml_parse_file($argv[1]);
  63. $logger->debug("connect to rabbitmq://" . $config['rabbitmq']['host'] . "@" . $config['rabbitmq']['host'] . ":" . $config['rabbitmq']['port'] . "/" . $config['rabbitmq']['virtual-host']);
  64. $queue_connection = new AMQPStreamConnection($config['rabbitmq']['host'], $config['rabbitmq']['port'], $config['rabbitmq']['user'], $config['rabbitmq']['password'], $config['rabbitmq']['virtual-host']);
  65. $queue_channel = $queue_connection->channel();
  66. publish_tex_to_pdf($logger, $queue_channel, $config['lily']['tex-to-pdf']['queue-name'], $config['lily']['tex-to-pdf']['callback-url']);
  67. $queue_channel->close();
  68. $queue_connection->close();
  69. $logger->warning("quit.");