改变文件结构

This commit is contained in:
BryantHe
2023-05-24 17:16:46 +08:00
parent b903a3fae0
commit a755b01675
11 changed files with 0 additions and 0 deletions

0
chassis/__init__.py Normal file
View File

41
chassis/chassis.py Normal file
View File

@@ -0,0 +1,41 @@
import logging
from jaeger_client import Config
from logstash_formatter import LogstashFormatterV1
from statsd import StatsClient
def init_statsd(prefix=None, host=None, port=8125):
statsd = StatsClient(host, port, prefix=prefix)
return statsd
def init_logger():
logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = LogstashFormatterV1()
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
def init_tracer(service):
config = Config(
config={
'sampler': {
'type': 'const',
'param': 1,
},
'local_agent': {
'reporting_host': "jaeger",
'reporting_port': 5775,
},
'logging': True,
'reporter_batch_size': 1,
},
service_name=service,
)
# this call also sets opentracing.tracer
return config.initialize_tracer()

View File

View File

@@ -0,0 +1,24 @@
AMQP_URI: pyamqp://${RABBIT_USER:guest}:${RABBIT_PASSWORD:guest}@${RABBIT_HOST:localhost}:${RABBIT_PORT:5672}/
RPC_EXCHANGE: 'nameko-rpc'
max_workers: 10
parent_calls_tracked: 20
LOGGING:
version: 1
formatters:
tracer:
(): nameko_tracer.formatters.PrettyJSONFormatter
handlers:
tracer:
class: logging.StreamHandler
formatter: tracer
loggers:
nameko_tracer:
level: INFO
handlers: [tracer]
SENTRY:
DSN: "xxxx"
CLIENT_CONFIG:
site: "my site name"

View File

@@ -0,0 +1,44 @@
import json
import datetime
import requests
from nameko.web.handlers import http
from nameko.timer import timer
from statsd import StatsClient
from circuitbreaker import circuit
class DemoChassisService:
name = "demo_chassis_service"
statsd = StatsClient('localhost', 8125, prefix='simplebank-nameko_demo')
@http('GET', '/health')
@statsd.timer('health')
def health(self, _request):
return json.dumps({'ok': datetime.datetime.utcnow().__str__()})
@http('GET', '/external')
@circuit(failure_threshold=5, expected_exception=ConnectionError)
@statsd.timer('external')
def external_request(self, _request):
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
return json.dumps({'code': response.status_code, 'body': response.text})
@http('GET', '/error')
@circuit(failure_threshold=5, expected_exception=ZeroDivisionError)
@statsd.timer('http_error')
def error_http_request(self):
return json.dumps({1 / 0})
class HealthCheckService:
name = "health_check_service"
statsd = StatsClient('localhost', 8125, prefix='simplebank-nameko_demo')
@timer(interval=10)
@statsd.timer('check_demo_service')
def check_demo_service(self):
response = requests.get('http://0.0.0.0:8000/health')
print("DemoChassisService HEALTH CHECK: status_code {}, response: {}".format(
response.status_code, response.text))

View File

@@ -0,0 +1,41 @@
from nameko.events import BROADCAST, EventDispatcher, event_handler
from nameko.rpc import rpc
from nameko.timer import timer
class EventPublisherService:
name = "publisher_service"
dispatch = EventDispatcher()
@rpc
def publish(self, event_type, payload):
self.dispatch(event_type, payload)
class AnEventListenerService:
name = "an_event_listener_service"
@event_handler("publisher_service", "an_event")
def consume_an_event(self, payload):
print("service {} received:".format(self.name), payload)
class AnotherEventListenerService:
name = "another_event_listener_service"
@event_handler("publisher_service", "another_event")
def consume_another_event(self, payload):
print("service {} received:".format(self.name), payload)
class ListenBothEventsService:
name = "listen_both_events_service"
@event_handler("publisher_service", "an_event")
def consume_an_event(self, payload):
print("service {} received:".format(self.name), payload)
@event_handler("publisher_service", "another_event")
def consume_another_event(self, payload):
print("service {} received:".format(self.name), payload)

View File

@@ -0,0 +1,25 @@
import json
from nameko.web.handlers import http
from werkzeug.wrappers import Response
from nameko_sentry import SentryReporter
class HttpDemoService:
name = "http_demo_service"
sentry = SentryReporter()
@http("GET", "/broken")
def broken(self, request):
raise ConnectionRefusedError()
@http('GET', '/books/<string:uuid>')
def demo_get(self, request, uuid):
data = {'id': uuid, 'title': 'The unbearable lightness of being',
'author': 'Milan Kundera'}
return Response(json.dumps({'book': data}),
mimetype='application/json')
@http('POST', '/books')
def demo_post(self, request):
return Response(json.dumps({'book': request.data.decode()}),
mimetype='application/json')

View File

@@ -0,0 +1,9 @@
nameko==2.14.1
nameko-tracer==1.4.0
logstash_formatter==0.5.17
circuitbreaker==2.0.0
statsd==4.0.1
gutter==0.5.0
request-id==1.0.1
nameko-sentry==1.0.0
pyopenssl==23.1.1

View File

@@ -0,0 +1,20 @@
from nameko.rpc import rpc, RpcProxy
class RpcResponderDemoService:
name = "rpc_responder_demo_service"
@rpc
def hello(self, name):
return "Hello, {}!".format(name)
class RpcCallerDemoService:
name = "rpc_caller_demo_service"
remote = RpcProxy("rpc_responder_demo_service")
@rpc
def remote_hello(self, value="John Doe"):
res = u"{}".format(value)
return self.remote.hello(res)

View File

View File

@@ -0,0 +1,13 @@
from rocketry import Rocketry
from rocketry.conds import daily
app = Rocketry()
@app.task(daily)
def do_daily():
print('日常任务')
if __name__ == '__main__':
app.run()