Логи
Файл: /app/logs/step-bot.log
File "/usr/local/lib/python3.12/pathlib.py", line 1376, in replace
os.replace(self, target)
│ │ │ └ PosixPath('/app/.env')
│ │ └ PosixPath('/app/.env.env.tmp')
│ └ <built-in function replace>
└ <module 'os' (frozen)>
OSError: [Errno 16] Device or resource busy: '/app/.env.env.tmp' -> '/app/.env'
2026-10-01 08:45:43.424 | ERROR | src.web.routes:settings_update:168 | update_env_file упал
Traceback (most recent call last):
File "/usr/local/bin/uvicorn", line 8, in <module>
sys.exit(main())
│ │ └ <Command main>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1631, in __call__
return self.main(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function Command.main at 0x74cb2a9c4b80>
└ <Command main>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1552, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x74cb2b922360>
│ └ <function Command.invoke at 0x74cb2a9c4860>
└ <Command main>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1415, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'host': '0.0.0.0', 'port': 8001, 'access_log': True, 'app': 'src.main:app', 'uds': None, 'fd': None, 'reload': False, 'reloa...
│ │ │ │ └ <click.core.Context object at 0x74cb2b922360>
│ │ │ └ <function main at 0x74cb2a80a0c0>
│ │ └ <Command main>
│ └ <function Context.invoke at 0x74cb2a9b39c0>
└ <click.core.Context object at 0x74cb2b922360>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 910, in invoke
return callback(*args, **kwargs)
│ │ └ {'host': '0.0.0.0', 'port': 8001, 'access_log': True, 'app': 'src.main:app', 'uds': None, 'fd': None, 'reload': False, 'reloa...
│ └ ()
└ <function main at 0x74cb2a80a0c0>
File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 448, in main
run(
└ <function run at 0x74cb2a9c82c0>
File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 632, in run
server.run()
│ └ <function Server.run at 0x74cb2a9e2fc0>
└ <uvicorn.server.Server object at 0x74cb2a9eb800>
File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 86, in run
return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
│ │ │ │ │ │ └ <function Config.get_loop_factory at 0x74cb2aaa32e0>
│ │ │ │ │ └ <uvicorn.config.Config object at 0x74cb2a9ebb00>
│ │ │ │ └ <uvicorn.server.Server object at 0x74cb2a9eb800>
│ │ │ └ None
│ │ └ <function Server.serve at 0x74cb2a9e3060>
│ └ <uvicorn.server.Server object at 0x74cb2a9eb800>
└ <function run at 0x74cb2b613880>
File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x74cb28c99b60>
│ └ <function Runner.run at 0x74cb2abef600>
└ <asyncio.runners.Runner object at 0x74cb2a9eb560>
File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<Server.serve() running at /usr/local/lib/python3.12/site-packages/uvicorn/server.py:90> wai...
│ │ └ <cyfunction Loop.run_until_complete at 0x74cb28b8dd90>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x74cb2a9eb560>
File "/usr/local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
result = await app( # type: ignore[func-returns-value]
└ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x74cb23f20650>
File "/usr/local/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in __call__
return await self.app(scope, receive, send)
│ │ │ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb2210a9...
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <fastapi.applications.FastAPI object at 0x74cb28f5bda0>
└ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x74cb23f20650>
File "/usr/local/lib/python3.12/site-packages/fastapi/applications.py", line 1215, in __call__
await super().__call__(scope, receive, send)
│ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb2210a9...
│ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
└ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
File "/usr/local/lib/python3.12/site-packages/starlette/applications.py", line 96, in __call__
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb2210a9...
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <starlette.middleware.errors.ServerErrorMiddleware object at 0x74cb23facce0>
└ <fastapi.applications.FastAPI object at 0x74cb28f5bda0>
File "/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
│ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x74cb235b56c0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <fastapi.telemetry._asgi.ExceptionTelemetryMiddleware object at 0x74cb28f84830>
└ <starlette.middleware.errors.ServerErrorMiddleware object at 0x74cb23facce0>
File "/usr/local/lib/python3.12/site-packages/fastapi/telemetry/_asgi.py", line 151, in __call__
await self.app(scope, receive, send)
│ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x74cb235b56c0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x74cb23faccb0>
└ <fastapi.telemetry._asgi.ExceptionTelemetryMiddleware object at 0x74cb28f84830>
File "/usr/local/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x74cb235b56c0>
│ │ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ │ │ └ <starlette.requests.Request object at 0x74cb2210a240>
│ │ └ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x74cb23facc80>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x74cb23faccb0>
└ <function wrap_app_handling_exceptions at 0x74cb28e56340>
File "/usr/local/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
└ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x74cb23facc80>
File "/usr/local/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <fastapi.routing.APIRouter object at 0x74cb291c4440>
└ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x74cb23facc80>
File "/usr/local/lib/python3.12/site-packages/starlette/routing.py", line 676, in __call__
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <bound method APIRouter.app of <fastapi.routing.APIRouter object at 0x74cb291c4440>>
└ <fastapi.routing.APIRouter object at 0x74cb291c4440>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 2786, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function _IncludedRouter.handle at 0x74cb28e98fe0>
└ _IncludedRouter(original_router=<fastapi.routing.APIRouter object at 0x74cb28db5f10>, include_context=_RouterIncludeContext(i...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 1817, in handle
await self.original_router.handle(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ │ └ <function APIRouter.handle at 0x74cb28e9b060>
│ └ <fastapi.routing.APIRouter object at 0x74cb28db5f10>
└ _IncludedRouter(original_router=<fastapi.routing.APIRouter object at 0x74cb28db5f10>, include_context=_RouterIncludeContext(i...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 2869, in handle
await included_router._handle_selected(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function _IncludedRouter._handle_selected at 0x74cb28e99080>
└ _IncludedRouter(original_router=<fastapi.routing.APIRouter object at 0x74cb28db5f10>, include_context=_RouterIncludeContext(i...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 1843, in _handle_selected
await original_route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function APIRoute.handle at 0x74cb28e7f240>
└ APIRoute(path='/settings/update', name='settings_update', methods=['POST'])
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 1308, in handle
await effective_context.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function request_response.<locals>.app at 0x74cb23fb2520>
└ _EffectiveRouteContext(original_route=APIRoute(path='/settings/update', name='settings_update', methods=['POST']), starlette_...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 165, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1620>
│ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ │ └ <starlette.requests.Request object at 0x74cb2210a3c0>
│ └ <function request_response.<locals>.app.<locals>.app at 0x74cb22bf1760>
└ <function wrap_app_handling_exceptions at 0x74cb28e56340>
File "/usr/local/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1a80>
│ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
└ <function request_response.<locals>.app.<locals>.app at 0x74cb22bf1760>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 151, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x74cb2210a3c0>
└ <function get_request_handler.<locals>.app at 0x74cb23fb25c0>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 727, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x74cb28e7e5c0>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 360, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'request': <starlette.requests.Request object at 0x74cb2210a3c0>}
│ └ <member 'call' of 'Dependant' objects>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[], dependencies=[], name=None, ca...
> File "/app/src/web/routes.py", line 166, in settings_update
report = update_env_file(env_path, updates)
│ │ └ {'INSTRUMENT__SYMBOL': 'DOGEUSDT', 'LEVERAGE__LEVERAGE': '0', 'TP__POINTS': '100', 'LOGGING__LEVEL': 'INFO', 'CAMPAIGN__TOTAL...
│ └ PosixPath('/app/.env')
└ <function update_env_file at 0x74cb28cb4040>
File "/app/src/web/env_writer.py", line 78, in update_env_file
tmp.replace(env_path)
│ │ └ PosixPath('/app/.env')
│ └ <function Path.replace at 0x74cb2aaa02c0>
└ PosixPath('/app/.env.env.tmp')
File "/usr/local/lib/python3.12/pathlib.py", line 1376, in replace
os.replace(self, target)
│ │ │ └ PosixPath('/app/.env')
│ │ └ PosixPath('/app/.env.env.tmp')
│ └ <built-in function replace>
└ <module 'os' (frozen)>
OSError: [Errno 16] Device or resource busy: '/app/.env.env.tmp' -> '/app/.env'
2026-10-01 08:45:43.812 | ERROR | src.web.routes:settings_update:168 | update_env_file упал
Traceback (most recent call last):
File "/usr/local/bin/uvicorn", line 8, in <module>
sys.exit(main())
│ │ └ <Command main>
│ └ <built-in function exit>
└ <module 'sys' (built-in)>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1631, in __call__
return self.main(*args, **kwargs)
│ │ │ └ {}
│ │ └ ()
│ └ <function Command.main at 0x74cb2a9c4b80>
└ <Command main>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1552, in main
rv = self.invoke(ctx)
│ │ └ <click.core.Context object at 0x74cb2b922360>
│ └ <function Command.invoke at 0x74cb2a9c4860>
└ <Command main>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1415, in invoke
return ctx.invoke(self.callback, **ctx.params)
│ │ │ │ │ └ {'host': '0.0.0.0', 'port': 8001, 'access_log': True, 'app': 'src.main:app', 'uds': None, 'fd': None, 'reload': False, 'reloa...
│ │ │ │ └ <click.core.Context object at 0x74cb2b922360>
│ │ │ └ <function main at 0x74cb2a80a0c0>
│ │ └ <Command main>
│ └ <function Context.invoke at 0x74cb2a9b39c0>
└ <click.core.Context object at 0x74cb2b922360>
File "/usr/local/lib/python3.12/site-packages/click/core.py", line 910, in invoke
return callback(*args, **kwargs)
│ │ └ {'host': '0.0.0.0', 'port': 8001, 'access_log': True, 'app': 'src.main:app', 'uds': None, 'fd': None, 'reload': False, 'reloa...
│ └ ()
└ <function main at 0x74cb2a80a0c0>
File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 448, in main
run(
└ <function run at 0x74cb2a9c82c0>
File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 632, in run
server.run()
│ └ <function Server.run at 0x74cb2a9e2fc0>
└ <uvicorn.server.Server object at 0x74cb2a9eb800>
File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 86, in run
return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
│ │ │ │ │ │ └ <function Config.get_loop_factory at 0x74cb2aaa32e0>
│ │ │ │ │ └ <uvicorn.config.Config object at 0x74cb2a9ebb00>
│ │ │ │ └ <uvicorn.server.Server object at 0x74cb2a9eb800>
│ │ │ └ None
│ │ └ <function Server.serve at 0x74cb2a9e3060>
│ └ <uvicorn.server.Server object at 0x74cb2a9eb800>
└ <function run at 0x74cb2b613880>
File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
return runner.run(main)
│ │ └ <coroutine object Server.serve at 0x74cb28c99b60>
│ └ <function Runner.run at 0x74cb2abef600>
└ <asyncio.runners.Runner object at 0x74cb2a9eb560>
File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
│ │ │ └ <Task pending name='Task-1' coro=<Server.serve() running at /usr/local/lib/python3.12/site-packages/uvicorn/server.py:90> wai...
│ │ └ <cyfunction Loop.run_until_complete at 0x74cb28b8dd90>
│ └ <uvloop.Loop running=True closed=False debug=False>
└ <asyncio.runners.Runner object at 0x74cb2a9eb560>
File "/usr/local/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
result = await app( # type: ignore[func-returns-value]
└ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x74cb23f20650>
File "/usr/local/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in __call__
return await self.app(scope, receive, send)
│ │ │ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221086...
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <fastapi.applications.FastAPI object at 0x74cb28f5bda0>
└ <uvicorn.middleware.proxy_headers.ProxyHeadersMiddleware object at 0x74cb23f20650>
File "/usr/local/lib/python3.12/site-packages/fastapi/applications.py", line 1215, in __call__
await super().__call__(scope, receive, send)
│ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221086...
│ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
└ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
File "/usr/local/lib/python3.12/site-packages/starlette/applications.py", line 96, in __call__
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <bound method RequestResponseCycle.send of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221086...
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <starlette.middleware.errors.ServerErrorMiddleware object at 0x74cb23facce0>
└ <fastapi.applications.FastAPI object at 0x74cb28f5bda0>
File "/usr/local/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
│ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x74cb22bf14e0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <fastapi.telemetry._asgi.ExceptionTelemetryMiddleware object at 0x74cb28f84830>
└ <starlette.middleware.errors.ServerErrorMiddleware object at 0x74cb23facce0>
File "/usr/local/lib/python3.12/site-packages/fastapi/telemetry/_asgi.py", line 151, in __call__
await self.app(scope, receive, send)
│ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x74cb22bf14e0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x74cb23faccb0>
└ <fastapi.telemetry._asgi.ExceptionTelemetryMiddleware object at 0x74cb28f84830>
File "/usr/local/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
│ │ │ │ │ │ └ <function ServerErrorMiddleware.__call__.<locals>._send at 0x74cb22bf14e0>
│ │ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ │ │ └ <starlette.requests.Request object at 0x74cb22108920>
│ │ └ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x74cb23facc80>
│ └ <starlette.middleware.exceptions.ExceptionMiddleware object at 0x74cb23faccb0>
└ <function wrap_app_handling_exceptions at 0x74cb28e56340>
File "/usr/local/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
└ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x74cb23facc80>
File "/usr/local/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <fastapi.routing.APIRouter object at 0x74cb291c4440>
└ <fastapi.middleware.asyncexitstack.AsyncExitStackMiddleware object at 0x74cb23facc80>
File "/usr/local/lib/python3.12/site-packages/starlette/routing.py", line 676, in __call__
await self.middleware_stack(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <bound method APIRouter.app of <fastapi.routing.APIRouter object at 0x74cb291c4440>>
└ <fastapi.routing.APIRouter object at 0x74cb291c4440>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 2786, in app
await route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function _IncludedRouter.handle at 0x74cb28e98fe0>
└ _IncludedRouter(original_router=<fastapi.routing.APIRouter object at 0x74cb28db5f10>, include_context=_RouterIncludeContext(i...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 1817, in handle
await self.original_router.handle(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ │ └ <function APIRouter.handle at 0x74cb28e9b060>
│ └ <fastapi.routing.APIRouter object at 0x74cb28db5f10>
└ _IncludedRouter(original_router=<fastapi.routing.APIRouter object at 0x74cb28db5f10>, include_context=_RouterIncludeContext(i...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 2869, in handle
await included_router._handle_selected(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function _IncludedRouter._handle_selected at 0x74cb28e99080>
└ _IncludedRouter(original_router=<fastapi.routing.APIRouter object at 0x74cb28db5f10>, include_context=_RouterIncludeContext(i...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 1843, in _handle_selected
await original_route.handle(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function APIRoute.handle at 0x74cb28e7f240>
└ APIRoute(path='/settings/update', name='settings_update', methods=['POST'])
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 1308, in handle
await effective_context.app(scope, receive, send)
│ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ └ <function request_response.<locals>.app at 0x74cb23fb2520>
└ _EffectiveRouteContext(original_route=APIRoute(path='/settings/update', name='settings_update', methods=['POST']), starlette_...
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 165, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
│ │ │ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf0fe0>
│ │ │ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ │ │ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
│ │ └ <starlette.requests.Request object at 0x74cb22108830>
│ └ <function request_response.<locals>.app.<locals>.app at 0x74cb22bf1120>
└ <function wrap_app_handling_exceptions at 0x74cb28e56340>
File "/usr/local/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
│ │ │ └ <function wrap_app_handling_exceptions.<locals>.wrapped_app.<locals>.sender at 0x74cb22bf1440>
│ │ └ <bound method RequestResponseCycle.receive of <uvicorn.protocols.http.httptools_impl.RequestResponseCycle object at 0x74cb221...
│ └ {'type': 'http', 'asgi': {'version': '3.0', 'spec_version': '2.3'}, 'http_version': '1.1', 'server': ('172.18.0.13', 8001), '...
└ <function request_response.<locals>.app.<locals>.app at 0x74cb22bf1120>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 151, in app
response = await f(request)
│ └ <starlette.requests.Request object at 0x74cb22108830>
└ <function get_request_handler.<locals>.app at 0x74cb23fb25c0>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 727, in app
raw_response = await run_endpoint_function(
└ <function run_endpoint_function at 0x74cb28e7e5c0>
File "/usr/local/lib/python3.12/site-packages/fastapi/routing.py", line 360, in run_endpoint_function
return await dependant.call(**values)
│ │ └ {'request': <starlette.requests.Request object at 0x74cb22108830>}
│ └ <member 'call' of 'Dependant' objects>
└ Dependant(path_params=[], query_params=[], header_params=[], cookie_params=[], body_params=[], dependencies=[], name=None, ca...
> File "/app/src/web/routes.py", line 166, in settings_update
report = update_env_file(env_path, updates)
│ │ └ {'INSTRUMENT__SYMBOL': 'DOGEUSDT', 'LEVERAGE__LEVERAGE': '5', 'TP__POINTS': '100', 'LOGGING__LEVEL': 'INFO', 'CAMPAIGN__TOTAL...
│ └ PosixPath('/app/.env')
└ <function update_env_file at 0x74cb28cb4040>
File "/app/src/web/env_writer.py", line 78, in update_env_file
tmp.replace(env_path)
│ │ └ PosixPath('/app/.env')
│ └ <function Path.replace at 0x74cb2aaa02c0>
└ PosixPath('/app/.env.env.tmp')
File "/usr/local/lib/python3.12/pathlib.py", line 1376, in replace
os.replace(self, target)
│ │ │ └ PosixPath('/app/.env')
│ │ └ PosixPath('/app/.env.env.tmp')
│ └ <built-in function replace>
└ <module 'os' (frozen)>
OSError: [Errno 16] Device or resource busy: '/app/.env.env.tmp' -> '/app/.env'
2026-10-01 08:46:29.057 | INFO | src.main:<module>:100 | ══════════════════════════════════════════════════════════════════════
2026-10-01 08:46:29.057 | INFO | src.main:<module>:101 | step-bot web admin запускается
2026-10-01 08:46:29.058 | INFO | src.main:<module>:102 | Mode: mainnet, Symbol: DOGEUSDT, Side: Buy, DRY_RUN: True
2026-10-01 08:46:29.058 | INFO | src.bybit_client:__init__:33 | BybitClient инициализирован: 🔴 MAINNET
2026-10-01 08:46:29.339 | INFO | src.main:check_account:84 | Аккаунт: UTA 2.0 ✅, marginMode=ISOLATED_MARGIN
2026-10-01 08:46:29.546 | INFO | src.main:check_account:91 | Доступный баланс USDT: 243.59874132
2026-10-01 08:46:29.567 | INFO | src.main:<module>:112 | FastAPI готов, слушаю на 0.0.0.0:8001
2026-10-01 08:46:38.327 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'updated', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:46:38.429 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'updated', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:47:22.727 | INFO | src.main:<module>:100 | ══════════════════════════════════════════════════════════════════════
2026-10-01 08:47:22.727 | INFO | src.main:<module>:101 | step-bot web admin запускается
2026-10-01 08:47:22.728 | INFO | src.main:<module>:102 | Mode: mainnet, Symbol: DOGEUSDT, Side: Buy, DRY_RUN: True
2026-10-01 08:47:22.728 | INFO | src.bybit_client:__init__:33 | BybitClient инициализирован: 🔴 MAINNET
2026-10-01 08:47:46.219 | INFO | src.main:check_account:84 | Аккаунт: UTA 2.0 ✅, marginMode=ISOLATED_MARGIN
2026-10-01 08:47:46.425 | INFO | src.main:check_account:91 | Доступный баланс USDT: 239.04354132
2026-10-01 08:47:46.448 | INFO | src.main:<module>:112 | FastAPI готов, слушаю на 0.0.0.0:8001
2026-10-01 08:48:15.322 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'unchanged', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:48:24.376 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'updated', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:49:19.202 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'unchanged', 'CAMPAIGN__NUM_PARTS': 'updated', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:49:30.755 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'unchanged', 'CAMPAIGN__NUM_PARTS': 'updated', 'LEVERAGE__LEVERAGE': 'updated', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:49:32.457 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'updated', 'CAMPAIGN__TOTAL_HOURS': 'unchanged', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'updated', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:49:48.290 | INFO | src.web.routes:settings_update:251 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'updated', 'CAMPAIGN__TOTAL_HOURS': 'updated', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 08:53:13.369 | INFO | src.calculator:calculate_campaign:90 | Запрашиваю данные с Bybit для расчёта...
2026-10-01 08:53:13.570 | INFO | src.calculator:calculate_campaign:96 | Инструмент DOGEUSDT: tickSize=0.00001, qtyStep=1, min_notional=5, max_leverage=75.00
2026-10-01 08:53:13.774 | INFO | src.calculator:calculate_campaign:103 | Баланс USDT: 236.24034132
2026-10-01 08:53:13.975 | INFO | src.calculator:calculate_campaign:106 | Last price DOGEUSDT: 0.09427
2026-10-01 08:53:14.270 | INFO | src.calculator:calculate_campaign:109 | Комиссии: maker=0.00036, taker=0.001
2026-10-01 08:53:14.471 | INFO | src.calculator:calculate_campaign:112 | Funding rate (8h): -0.00010257
2026-10-01 08:53:48.709 | INFO | src.main:<module>:100 | ══════════════════════════════════════════════════════════════════════
2026-10-01 08:53:48.709 | INFO | src.main:<module>:101 | step-bot web admin запускается
2026-10-01 08:53:48.709 | INFO | src.main:<module>:102 | Mode: mainnet, Symbol: DOGEUSDT, Side: Buy, DRY_RUN: True
2026-10-01 08:53:48.710 | INFO | src.bybit_client:__init__:33 | BybitClient инициализирован: 🔴 MAINNET
2026-10-01 08:53:48.988 | INFO | src.main:check_account:84 | Аккаунт: UTA 2.0 ✅, marginMode=ISOLATED_MARGIN
2026-10-01 08:53:49.193 | INFO | src.main:check_account:91 | Доступный баланс USDT: 237.99234132
2026-10-01 08:53:49.217 | INFO | src.main:<module>:112 | FastAPI готов, слушаю на 0.0.0.0:8001
2026-10-01 08:54:03.113 | INFO | src.web.routes:settings_update:378 | Settings updated via web UI: {'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'unchanged'}
2026-10-01 09:06:53.276 | INFO | src.web.routes:settings_update:378 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'updated', 'CAMPAIGN__TOTAL_HOURS': 'unchanged', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'updated', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 09:09:07.266 | INFO | src.main:<module>:100 | ══════════════════════════════════════════════════════════════════════
2026-10-01 09:09:07.266 | INFO | src.main:<module>:101 | step-bot web admin запускается
2026-10-01 09:09:07.266 | INFO | src.main:<module>:102 | Mode: mainnet, Symbol: DOGEUSDT, Side: Buy, DRY_RUN: True
2026-10-01 09:09:07.267 | INFO | src.bybit_client:__init__:33 | BybitClient инициализирован: 🔴 MAINNET
2026-10-01 09:09:07.581 | INFO | src.main:check_account:84 | Аккаунт: UTA 2.0 ✅, marginMode=ISOLATED_MARGIN
2026-10-01 09:09:07.796 | INFO | src.main:check_account:91 | Доступный баланс USDT: 230.63394132
2026-10-01 09:09:07.817 | INFO | src.main:<module>:112 | FastAPI готов, слушаю на 0.0.0.0:8001
2026-10-01 09:09:21.679 | INFO | src.web.routes:settings_update:377 | Settings updated via web UI: {'CAMPAIGN__TOTAL_HOURS': 'updated'}
2026-10-01 09:09:21.905 | INFO | src.web.routes:settings_update:377 | Settings updated via web UI: {'CAMPAIGN__TOTAL_HOURS': 'updated'}
2026-10-01 09:10:05.892 | INFO | src.web.routes:settings_update:377 | Settings updated via web UI: {'EXCHANGE__MODE': 'unchanged', 'EXCHANGE__MAINNET_CONFIRMED': 'unchanged', 'INSTRUMENT__SYMBOL': 'unchanged', 'INSTRUMENT__SIDE': 'unchanged', 'CAMPAIGN__DEPOSIT_PERCENT': 'unchanged', 'CAMPAIGN__TOTAL_HOURS': 'unchanged', 'CAMPAIGN__NUM_PARTS': 'unchanged', 'LEVERAGE__LEVERAGE': 'unchanged', 'TP__POINTS': 'unchanged', 'TP__POINT_SIZE': 'unchanged', 'SAFETY__DRY_RUN': 'unchanged', 'LOGGING__LEVEL': 'unchanged'}
2026-10-01 09:16:47.678 | INFO | src.calculator:calculate_campaign:90 | Запрашиваю данные с Bybit для расчёта...
2026-10-01 09:16:47.882 | INFO | src.calculator:calculate_campaign:96 | Инструмент DOGEUSDT: tickSize=0.00001, qtyStep=1, min_notional=5, max_leverage=75.00
2026-10-01 09:16:48.086 | INFO | src.calculator:calculate_campaign:103 | Баланс USDT: 229.93314132
2026-10-01 09:16:48.289 | INFO | src.calculator:calculate_campaign:106 | Last price DOGEUSDT: 0.09446
2026-10-01 09:16:48.597 | INFO | src.calculator:calculate_campaign:109 | Комиссии: maker=0.00036, taker=0.001
2026-10-01 09:16:48.801 | INFO | src.calculator:calculate_campaign:112 | Funding rate (8h): -0.00006884
2026-10-01 09:18:56.449 | INFO | src.calculator:calculate_campaign:90 | Запрашиваю данные с Bybit для расчёта...
2026-10-01 09:18:56.652 | INFO | src.calculator:calculate_campaign:96 | Инструмент DOGEUSDT: tickSize=0.00001, qtyStep=1, min_notional=5, max_leverage=75.00
2026-10-01 09:18:56.859 | INFO | src.calculator:calculate_campaign:103 | Баланс USDT: 227.83074132
2026-10-01 09:18:57.066 | INFO | src.calculator:calculate_campaign:106 | Last price DOGEUSDT: 0.09451
2026-10-01 09:18:57.369 | INFO | src.calculator:calculate_campaign:109 | Комиссии: maker=0.00036, taker=0.001
2026-10-01 09:18:57.575 | INFO | src.calculator:calculate_campaign:112 | Funding rate (8h): -0.00006416
2026-10-01 09:19:04.343 | INFO | src.calculator:calculate_campaign:90 | Запрашиваю данные с Bybit для расчёта...
2026-10-01 09:19:04.547 | INFO | src.calculator:calculate_campaign:96 | Инструмент DOGEUSDT: tickSize=0.00001, qtyStep=1, min_notional=5, max_leverage=75.00
2026-10-01 09:19:04.752 | INFO | src.calculator:calculate_campaign:103 | Баланс USDT: 228.18114132
2026-10-01 09:19:04.954 | INFO | src.calculator:calculate_campaign:106 | Last price DOGEUSDT: 0.09451
2026-10-01 09:19:05.251 | INFO | src.calculator:calculate_campaign:109 | Комиссии: maker=0.00036, taker=0.001
2026-10-01 09:19:05.454 | INFO | src.calculator:calculate_campaign:112 | Funding rate (8h): -0.00006416
2026-10-01 09:19:08.373 | INFO | src.calculator:calculate_campaign:90 | Запрашиваю данные с Bybit для расчёта...
2026-10-01 09:19:08.576 | INFO | src.calculator:calculate_campaign:96 | Инструмент DOGEUSDT: tickSize=0.00001, qtyStep=1, min_notional=5, max_leverage=75.00
2026-10-01 09:19:08.783 | INFO | src.calculator:calculate_campaign:103 | Баланс USDT: 228.18114132
2026-10-01 09:19:08.985 | INFO | src.calculator:calculate_campaign:106 | Last price DOGEUSDT: 0.09451
2026-10-01 09:19:09.284 | INFO | src.calculator:calculate_campaign:109 | Комиссии: maker=0.00036, taker=0.001
2026-10-01 09:19:09.489 | INFO | src.calculator:calculate_campaign:112 | Funding rate (8h): -0.00006591
2026-10-01 09:20:37.199 | INFO | src.calculator:calculate_campaign:90 | Запрашиваю данные с Bybit для расчёта...
2026-10-01 09:20:37.402 | INFO | src.calculator:calculate_campaign:96 | Инструмент DOGEUSDT: tickSize=0.00001, qtyStep=1, min_notional=5, max_leverage=75.00
2026-10-01 09:20:37.612 | INFO | src.calculator:calculate_campaign:103 | Баланс USDT: 229.23234132
2026-10-01 09:20:37.816 | INFO | src.calculator:calculate_campaign:106 | Last price DOGEUSDT: 0.09448
2026-10-01 09:20:38.108 | INFO | src.calculator:calculate_campaign:109 | Комиссии: maker=0.00036, taker=0.001
2026-10-01 09:20:38.311 | INFO | src.calculator:calculate_campaign:112 | Funding rate (8h): -0.00006329