def test_print_writer_stdout(self):
     f = io.StringIO()
     with redirect_stdout(f):
         with closing(
                 SidecarWriter.create("stdout")) as w:  # type: PrintWriter
             w.write_line("foo")
             self.assertEqual("foo\n", f.getvalue())
Esempio n. 2
0
 def __init__(
     self,
     meter_id: MeterId,
     writer: SidecarWriter = SidecarWriter.create("none")
 ) -> None:
     super().__init__(meter_id, "m")
     self._writer = writer
 def test_noop_writer(self):
     noop = SidecarWriter.create("none")
     try:
         noop.write_impl("foo")
         noop.close()
     except NotImplementedError:
         self.fail("NoopWriter raised NotImplementedError unexpectedly!")
Esempio n. 4
0
 def test_udp(self) -> None:
     with closing(UdpServer()) as server:  # type: UdpServer
         with closing(SidecarWriter.create(
                 server.address())) as w:  # type: SidecarWriter
             w.write_line("foo")
             self.assertEqual("foo", server.read())
             w.write_line("bar")
             self.assertEqual("bar", server.read())
    def test_print_writer_custom(self):
        with TemporaryDirectory() as tmpdir:
            tmpfile = os.path.join(tmpdir, "print-writer.txt")
            writer = SidecarWriter.create("file://{}".format(tmpfile))

            with closing(writer) as w:  # type: PrintWriter
                w.write_line("foo")

            with open(tmpfile, encoding="utf-8") as f:
                line = f.read()
                self.assertEqual("foo\n", line)
Esempio n. 6
0
 def __init__(
     self,
     meter_id: MeterId,
     meter_type: str = "d",
     writer: SidecarWriter = SidecarWriter.create("none")
 ) -> None:
     if meter_type not in ["d", "D"]:
         raise ValueError(
             "Distribution Summaries must have a meter type of 'd' or 'D'.")
     super().__init__(meter_id, meter_type)
     self._writer = writer
Esempio n. 7
0
 def __init__(
     self,
     meter_id: MeterId,
     ttl_seconds: Optional[int] = None,
     writer: SidecarWriter = SidecarWriter.create("none")
 ) -> None:
     if ttl_seconds is None:
         meter_type = "g"
     else:
         meter_type = "g,{}".format(ttl_seconds)
     super().__init__(meter_id, meter_type)
     self._writer = writer
Esempio n. 8
0
    def __init__(
        self,
        meter_id: MeterId,
        clock: Clock = SystemClock(),
        meter_type: str = "t",
        writer: SidecarWriter = SidecarWriter.create("none")
    ) -> None:
        if meter_type not in ["t", "T"]:
            raise ValueError("Timers must have a meter type of 't' or 'T'.")

        super().__init__(meter_id, meter_type)
        self._clock = clock
        self._writer = writer
Esempio n. 9
0
    def test_concurrent_writes(self) -> None:
        """When running with four writer threads and one reader thread, there appears to
        be an upper limit of 18,000 +/- 500 messages. This can be observed by increasing
        the messages_per_thread to 10000. We may need to investigate performance here. The
        current value for messages_per_thread is the largest value that allows the test to
        complete successfully in most cases. Even adding a debug log line to the UdpWriter
        class can impact the number of messages received."""

        messages_per_thread = 2500
        writer_thread_count = 4
        lines = []

        with closing(UdpServer()) as server:  # type: UdpServer
            with closing(SidecarWriter.create(
                    server.address())) as w:  # type: SidecarWriter

                def reader_target() -> None:
                    while True:
                        line = server.read()
                        if line != "done":
                            lines.append(line)
                        else:
                            break

                reader = threading.Thread(target=reader_target)
                reader.start()

                def writer_target(n: int) -> None:
                    base = n * messages_per_thread
                    for i in range(0, messages_per_thread):
                        w.write_line("{}".format(base + i))

                threads = []
                for j in range(0, writer_thread_count):
                    thread = threading.Thread(target=writer_target, args=[j])
                    threads.append(thread)
                    thread.start()

                for t in threads:
                    t.join()

                w.write_line("done")
                reader.join()

        m = writer_thread_count * messages_per_thread
        self.assertEqual(m, len(lines))
        self.assertEqual(m * (m - 1) / 2, sum(map(int, lines)))
 def test_invalid_location(self):
     with self.assertRaises(ValueError):
         SidecarWriter.create("foo")
 def test_close_requires_concrete_class(self):
     with self.assertRaises(NotImplementedError):
         SidecarWriter("foo").close()
 def test_write_impl_requires_concrete_class(self):
     with self.assertRaises(NotImplementedError):
         SidecarWriter("foo").write_impl("bar")
Esempio n. 13
0
 def __init__(self, clock: Clock = SystemClock(),
              config: SidecarConfig = SidecarConfig()) -> None:
     self._clock = clock
     self._common_tags = config.common_tags()
     self._writer = SidecarWriter.create(config.output_location())