summaryrefslogtreecommitdiffstats
path: root/src/scripts/docker-url-handler.lnav
blob: a8e9597eb0d2c7325b4fad2637d76c209cbadf9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#
# @synopsis: docker-url-handler
# @description: Internal script to handle opening docker/podman URLs
#

;SELECT jget(url, '/scheme') AS docker_scheme,
        jget(url, '/host') AS docker_hostname,
        jget(url, '/path') AS docker_path
   FROM (SELECT parse_url($1) AS url)

;SELECT substr($docker_path, 2) AS docker_relpath

;SELECT CASE
        $docker_hostname
        WHEN 'compose' THEN (
            SELECT group_concat(
                    printf(
                        ':sh --name=%s %s-compose -f %s logs --no-log-prefix -f %s',
                        compose_services.key,
                        $docker_scheme,
                        $docker_relpath,
                        compose_services.key
                    ),
                    char(10)
                ) AS cmds
            FROM fstat($docker_relpath) AS st,
                regexp_capture(
                    ifnull(
                        st.data,
                        raise_error(
                            'Cannot read compose configuration: ' || $docker_relpath,
                            st.error
                        )
                    ),
                    '(?m)(?:^---$)?((?:(?:.|\n)(?!^(?:---|\.\.\.)$))+)'
                ) AS ydoc,
                json_each(
                    yaml_to_json(
                        ydoc.content
                    ),
                    '$.services'
                ) as compose_services
            WHERE ydoc.match_index = 0
                AND ydoc.capture_index = 1
        )
        ELSE CASE
            $docker_path
            WHEN '/' THEN printf(
                ':sh %s logs -f %s',
                $docker_scheme,
                $docker_hostname
            )
            ELSE printf(
                ':sh %s exec %s tail -n +0 -F "%s"',
                $docker_scheme,
                $docker_hostname,
                $docker_path
            )
        END
    END AS cmds

:eval ${cmds}