yuzutech / kroki

Creates diagrams from textual descriptions!
https://kroki.io
MIT License
2.79k stars 206 forks source link

PlantUML support of plantuml-stdlib #578

Closed romkavt closed 3 years ago

romkavt commented 3 years ago

It would be great to implement support of entire https://plantuml.com/stdlib embedded into PlantUML. Looks strange: "!include <C4/C4_Container>" works well, but "!include <archimate/Archimate>" or "!include <aws/common>" does not.

I see the following error message in kroki logs when trying to use plantuml-stdlib: {"timestamp":"1612202036712","level":"ERROR","thread":"vert.x-eventloop-thread-0","mdc":{"error_message":"Syntax Error? (line: 9)","path":"/plantuml/svg/eNp....

ggrossetie commented 3 years ago

Hello @romkavt

It would be great to implement support of entire plantuml.com/stdlib embedded into PlantUML. Looks strange: "!include <C4/C4_Container>" works well, but "!include <archimate/Archimate>" or "!include <aws/common>" does not.

It should work... :thinking: Could you please share the complete stacktrace/log or a sample diagram that reproduces this issue?

Here's a working example on https://kroki.io (running v0.10.0)

!include <archimate/Archimate>
!include <aws/common>
!include <aws/Storage/AmazonS3/AmazonS3>
!include <aws/Storage/AmazonS3/bucket/bucket>

rectangle GO #lightgreen
rectangle STOP #red
rectangle WAIT #orange

AMAZONS3(s3_internal)
AMAZONS3(s3_partner,"Vendor's S3")
s3_internal <- s3_partner

https://kroki.io/plantuml/svg/eNqFjDELwjAQhff8irQdtKB0yFqETOKgFVIUXCSmRxpsL3JNEfz1dlBbXZzu8b3vXeTQNH0FPNdkatfqAJl8pxWLxvreZca3rcdfqoInbYdZqx8elfiEv-KlN1cIr7NijMAEjbYBvi540jhbB0sAOClUWex5QlBN2FFuSp4Mv9ECY3IrT8VOiXknzg4DEOom_aI3TQGBFvEBsPI067gSccomPs-XfBSfEPNjog==

romkavt commented 3 years ago

Thanks for your attention

Here is an example of diagram:

@startuml
title Базовый модуль SDK: YooId
!include <archimate/Archimate>

Grouping(SDK, "SDK") {
    Application_Component(SdkYooId, "YooId SDK\n(SDK авторизаций\nсервисов)")

    Application_Service(ServiceYooId, "user-auth-center-api")
    Rel_Access_w_Right(SdkYooId, ServiceYooId, "взаимодействует")

    Application_DataObject(UserAuthorization, "Авторизация\nпользователя YooId\n(авторизация СЦА)")
    Rel_Association_Right(UserAuthorization, SdkYooId, "хранит\nна устройстве")

    Application_Function(FuncYooIdSignIn, "Функции учетной записи YooId:\n\n1. Вход/выход в учетную запись YooId\n2. Открытие новой учетной записи YooId на основе контекста регистрации в прикладном сервисе\n3. Открытие WebView в авторизованном состоянии\n4. Хранение авторизации на устройстве\n5. Аутентификация на устройстве\n(Код доступа, биометрия)")
    Rel_Assignment_Down(SdkYooId, FuncYooIdSignIn, "реализует")
}

Application_Component(App, "Приложение ЛК YooKassa")
Rel_Aggregation(App, SdkYooId, "содержит")

Application_Function(FuncApp, "Личный кабинет YooKassa")
Rel_Assignment_Left(App, FuncApp, "реализует")

@enduml

Here are log messages:

$ docker image ls

REPOSITORY                    TAG            IMAGE ID       CREATED       SIZE
yuzutech/kroki                latest         e74da1442c93   11 days ago   434MB
yuzutech/kroki-excalidraw     latest         2a02f4048390   5 weeks ago   413MB
yuzutech/kroki-bpmn           latest         459dd2c8cc1e   5 weeks ago   413MB
yuzutech/kroki-mermaid        latest         01208df126a6   5 weeks ago   440MB
yuzutech/kroki-blockdiag      latest         ebc85d84c8fb   5 weeks ago   113MB
yuzutech/kroki                jdk-11         96c7a4962470   5 weeks ago   428MB
yuzutech/kroki                jdk11-alpine   96c7a4962470   5 weeks ago   428MB
kroki-builder-static-svgbob   latest         ab7e4d49039b   5 weeks ago   1.74GB
kroki-builder-static-erd      latest         08e4c1bd43ca   5 weeks ago   2.56GB
kroki-builder-bytefield       alpine         628e19dc9545   5 weeks ago   267MB
kroki-builder-bytefield       latest         628e19dc9545   5 weeks ago   267MB
kroki-builder-wavedrom        alpine         76a241f77ea7   5 weeks ago   261MB
kroki-builder-wavedrom        latest         76a241f77ea7   5 weeks ago   261MB
kroki-builder-vega            alpine         8700efa3f102   5 weeks ago   665MB
kroki-builder-vega            latest         8700efa3f102   5 weeks ago   665MB
kroki-builder-nomnoml         alpine         485e094c95a4   5 weeks ago   263MB
kroki-builder-nomnoml         latest         485e094c95a4   5 weeks ago   263MB
yuzutech/kroki                <none>         d53c24754abc   6 weeks ago   433MB

$docker run -p8000:8000 yuzutech/kroki

{"timestamp":"1612258307272","level":"INFO","thread":"vert.x-eventloop-thread-1","logger":"io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer","message":"Succeeded in deploying verticle","context":"default"}
{"timestamp":"1612258801236","level":"INFO","thread":"vert.x-eventloop-thread-0","mdc":{"path":"/plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","method":"GET","service_name":"plantuml","action":"request_received","bytes_read":"0","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"},"logger":"io.kroki.server.service.DiagramHandler","message":"Request received GET /plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","context":"default"}
{"timestamp":"1612258801952","level":"INFO","thread":"vert.x-eventloop-thread-0","mdc":{"path":"/plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","took":"700","method":"GET","service_name":"plantuml","action":"convert","file_format":"svg","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"},"logger":"io.kroki.server.service.DiagramHandler","message":"Convert took 700ms","context":"default"}
{"timestamp":"1612258801957","level":"ERROR","thread":"vert.x-eventloop-thread-0","mdc":{"error_message":"Syntax Error? (line: 4)","path":"/plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","method":"GET","action":"error","error_code":"400","failure_class_name":"io.kroki.server.error.BadRequestException","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"},"logger":"io.kroki.server.error.ErrorHandler","message":"An error occurred","context":"default","exception":"io.kroki.server.error.BadRequestException: Syntax Error? (line: 4)\n\tat io.kroki.server.service.Plantuml.convert(Plantuml.java:219)\n\tat io.kroki.server.service.Plantuml.convert(Plantuml.java:190)\n\tat io.kroki.server.service.DiagramHandler.convert(DiagramHandler.java:152)\n\tat io.kroki.server.service.DiagramHandler.lambda$createGet$1(DiagramHandler.java:56)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:95)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.kroki.server.service.DiagramHandler.lambda$createRequestReceived$0(DiagramHandler.java:38)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:125)\n\tat io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:38)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:54)\n\tat io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:36)\n\tat io.vertx.core.http.impl.WebSocketRequestHandler.handle(WebSocketRequestHandler.java:50)\n\tat io.vertx.core.http.impl.WebSocketRequestHandler.handle(WebSocketRequestHandler.java:32)\n\tat io.vertx.core.http.impl.Http1xServerConnection.handleMessage(Http1xServerConnection.java:136)\n\tat io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)\n\tat io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43)\n\tat io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229)\n\tat io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)\n\tat io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler.channelRead(WebSocketServerExtensionHandler.java:101)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.vertx.core.http.impl.Http1xUpgradeToH2CHandler.channelRead(Http1xUpgradeToH2CHandler.java:109)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\tat java.base/java.lang.Thread.run(Unknown Source)\n"}
{"timestamp":"1612258802184","level":"INFO","thread":"vert.x-eventloop-thread-0","mdc":{"path":"/plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","method":"GET","service_name":"plantuml","action":"request_received","bytes_read":"0","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"},"logger":"io.kroki.server.service.DiagramHandler","message":"Request received GET /plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","context":"default"}
{"timestamp":"1612258802215","level":"INFO","thread":"vert.x-eventloop-thread-0","mdc":{"path":"/plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","took":"29","method":"GET","service_name":"plantuml","action":"convert","file_format":"svg","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"},"logger":"io.kroki.server.service.DiagramHandler","message":"Convert took 29ms","context":"default"}
{"timestamp":"1612258802217","level":"ERROR","thread":"vert.x-eventloop-thread-0","mdc":{"error_message":"Syntax Error? (line: 4)","path":"/plantuml/svg/eNqFVN9r01AUfs9fcd1TC5vDXy9DZMWijAnCihMhULL02kXbm5KkDhRh7Zx7UOz0cQNFUJ9jbWbWru2_cO5_5Hdvsi1bM-xDc3KT853v-845WfYDywvazYYROEGDM_pMIf2lCfXlBzpmdIJwIHdoJD-ySnl1iT1z3ZWacc0RdqNd4-yu5dmbTtMK-GLpNLpnGA89t91yRL2AnHk2h_-5IntjMPxKrVbDsa3AcUX1vttsuYKLoFCpvdTIeFlfVTFTqHQGQn3ZpYncphjUQvke12NTyA5FOOtTjAiEi3NFY6ZChXuvHJsX0utpjbbPvQWrHWwu2Kiu4paDdJW9xhvVkm1z369uVdec-maW3CUYFAch0NE2UUTHsgOqfRgWyW4en7IVWI83XnA7KDwBhxIouJ7zWj9UgPuzWmXPFDRFAfQgaQ3Ouyg2kr2kHTAqzyQ8pu_0i_aLWWm-79pOQiZRl8Mj0w25C8iQxoDrgseYQiZ3lEocT071UpSn9UFb2CooqEDjVZy6WNE6f8CiMQ11L2OFuKccw9FETZ0ydar7GicKl0xhihvXGX2Ru8rqRTWfScion8lH9CmTj6lNHbqJ5K94Yyi3kdlF2Yjpcn1d8r8MmJYOgztpFtKHCMa6FUPtA6zZxs0fXVkZFKb6QJGmujVDGgF5oDFO2IURjkxxK4fkU76x7vAtjXGxyXoSgHSGNdEsJrKn2kWxKW4D72fav0gfRvnrFLMrO2uKO0DZxyMlVMmN5Tut5GzIrk4t0EHSo0FCDl2fUjjP6DcQwFpZrojI3qUZxaA0sZnVsrslMvs3O0na8RCuQszZ2r01jPzPDE7V9H3T4kdgcHTuyyEdqFavWr5vAUMTqdc9XtcgSWp2MTrJzgPqSC2H2oArpz-te4gX9-Ch_rTCQG3DWJGeqXxuwSP-PCV-jpSr2ljmooZP-T-PJxIO","method":"GET","action":"error","error_code":"400","failure_class_name":"io.kroki.server.error.BadRequestException","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"},"logger":"io.kroki.server.error.ErrorHandler","message":"An error occurred","context":"default","exception":"io.kroki.server.error.BadRequestException: Syntax Error? (line: 4)\n\tat io.kroki.server.service.Plantuml.convert(Plantuml.java:219)\n\tat io.kroki.server.service.Plantuml.convert(Plantuml.java:190)\n\tat io.kroki.server.service.DiagramHandler.convert(DiagramHandler.java:152)\n\tat io.kroki.server.service.DiagramHandler.lambda$createGet$1(DiagramHandler.java:56)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:95)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.kroki.server.service.DiagramHandler.lambda$createRequestReceived$0(DiagramHandler.java:38)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:125)\n\tat io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:38)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:54)\n\tat io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:36)\n\tat io.vertx.core.http.impl.WebSocketRequestHandler.handle(WebSocketRequestHandler.java:50)\n\tat io.vertx.core.http.impl.WebSocketRequestHandler.handle(WebSocketRequestHandler.java:32)\n\tat io.vertx.core.http.impl.Http1xServerConnection.handleMessage(Http1xServerConnection.java:136)\n\tat io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)\n\tat io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43)\n\tat io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229)\n\tat io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)\n\tat io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler.channelRead(WebSocketServerExtensionHandler.java:101)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\tat java.base/java.lang.Thread.run(Unknown Source)\n"}

Some extra info:

ggrossetie commented 3 years ago

Thanks, I can reproduce this issue! !include <archimate/Archimate> is unintentionally removed by the sanitizer. As a workaround, you can set the safe mode to UNSAFE:

$ docker run -e KROKI_SAFE_MODE=unsafe -p8000:8000 yuzutech/kroki
romkavt commented 3 years ago

Thanks for your efforts! With KROKI_SAFE_MODE=unsafe ArchiMate diagrams works well. Waiting kroki 0.11 release)

romkavt commented 3 years ago

I have another one case.

Here in an diagram source code:

title Контекст интеграции систем TC и Yoo
!include <C4/C4_Container>

Person_Ext(User, "User", "Пользователь сервисов TC и Yoo")
System_Ext(Pay, "Apple/Google")
Rel_R(User, Pay, "Использует для платежа банковской картой")

produces the following error in kroki server with KROKI_SAFE_MODE=unsafe setting on Ubuntu:

{"timestamp":"1612370450845","level":"ERROR","thread":"vert.x-eventloop-thread-0","mdc":{"error_message":"Cannot open URL (line: 0)","path":"/plantuml/svg/eNpNj8FKw0AQhu95ijEnBaGXehNBgngSStWDp1B0kUDcLckK5tZG0ItQvImXvkKsVmNr6yvMvJH_tCl4mvln_p3vX5_41BC_8pIXUvKUZzKUkrhu5LsMuJIH6JpkyLVuMf6hs2gPLrpw7sRZUwRbib1Mb68M7UftVtSOI2d9L7EmOwiCjslyZ-OjO799nptsl0ItISqPAZ7LE3-hTkDS49DKmgI9UaKuiMcyklKeMVzKI8-4-o8Pd4LTIvfmZgXp9ArcPuz3U4O2dezc9aqDq2vSuNukWNv4BYTfTQy5Bxf__4AcEebzJtSnAt-44gXYCIRHWr9Jo8gAHggA_gDbYbS7","method":"GET","action":"error","error_code":"400","failure_class_name":"io.kroki.server.error.BadRequestException","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.60 YaBrowser/20.12.0.1065 Yowser/2.5 Safari/537.36"},"logger":"io.kroki.server.error.ErrorHandler","message":"An error occurred","context":"default","exception":"io.kroki.server.error.BadRequestException: Cannot open URL (line: 0)\n\tat io.kroki.server.service.Plantuml.convert(Plantuml.java:219)\n\tat io.kroki.server.service.Plantuml.convert(Plantuml.java:190)\n\tat io.kroki.server.service.DiagramHandler.convert(DiagramHandler.java:152)\n\tat io.kroki.server.service.DiagramHandler.lambda$createGet$1(DiagramHandler.java:56)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:95)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.kroki.server.service.DiagramHandler.lambda$createRequestReceived$0(DiagramHandler.java:38)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:125)\n\tat io.vertx.ext.web.handler.impl.CorsHandlerImpl.handle(CorsHandlerImpl.java:38)\n\tat io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)\n\tat io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131)\n\tat io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132)\n\tat io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:54)\n\tat io.vertx.ext.web.impl.RouterImpl.handle(RouterImpl.java:36)\n\tat io.vertx.core.http.impl.WebSocketRequestHandler.handle(WebSocketRequestHandler.java:50)\n\tat io.vertx.core.http.impl.WebSocketRequestHandler.handle(WebSocketRequestHandler.java:32)\n\tat io.vertx.core.http.impl.Http1xServerConnection.handleMessage(Http1xServerConnection.java:136)\n\tat io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)\n\tat io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43)\n\tat io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229)\n\tat io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)\n\tat io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler.channelRead(WebSocketServerExtensionHandler.java:101)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.vertx.core.http.impl.Http1xUpgradeToH2CHandler.channelRead(Http1xUpgradeToH2CHandler.java:109)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\tat java.base/java.lang.Thread.run(Unknown Source)\n"}
ggrossetie commented 3 years ago

It seems to be working on https://kroki.io

https://kroki.io/plantuml/svg/eNpNj8FKw0AQhu95ijEnBaGXehNBgngSStWDp1B0kUDcLckK5tZG0ItQvImXvkKsVmNr6yvMvJH_tCl4mvln_p3vX5_41BC_8pIXUvKUZzKUkrhu5LsMuJIH6JpkyLVuMf6hs2gPLrpw7sRZUwRbib1Mb68M7UftVtSOI2d9L7EmOwiCjslyZ-OjO799nptsl0ItISqPAZ7LE3-hTkDS49DKmgI9UaKuiMcyklKeMVzKI8-4-o8Pd4LTIvfmZgXp9ArcPuz3U4O2dezc9aqDq2vSuNukWNv4BYTfTQy5Bxf__4AcEebzJtSnAt-44gXYCIRHWr9Jo8gAHggA_gDbYbS7

Not entirely sure why it throws Cannot open URL (line: 0). Are you using the Docker image? Are you running the jar with java -jar?

ggrossetie commented 3 years ago

I cannot reproduce this issue on master using java -jar and kroki.io is using the Docker image so it's either an "install" issue or this issue is now fixed on master.

If you still get this error on the next version (v0.11.0), feel to open a new issue with a reproduction case.

romkavt commented 3 years ago

I had used Docker container image. I think I found the reason of an error: https://github.com/plantuml/plantuml-stdlib/issues/32