REPO: cleanup work

This commit is contained in:
Able 2025-02-22 07:21:10 -06:00
parent 65d28b28d4
commit c717faa947
7 changed files with 124 additions and 36 deletions

9
assets/html/repo.html Normal file
View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html>
<head>
<title>Repo- ~(repo_name)</title>
</head>
<body>
</body>
</html>

View file

@ -8,10 +8,10 @@ defmodule RlRepo.ClientHandler do
Logger.info("Processing client request.")
client_socket
|> read_request
|> create_response()
|> create_response_header()
|> write_response(client_socket)
|> read_request
|> create_response()
|> create_response_header()
|> write_response(client_socket)
end
def read_request(client_socket) do
@ -27,15 +27,13 @@ defmodule RlRepo.ClientHandler do
Logger.info("Building response body.")
a = String.split(request, "\n\r")
[get_line | _rest] = a
Logger.info "get-line #{get_line}"
Logger.info("get-line #{get_line}")
b = String.split(get_line, " ")
[request_type | rest] = b
Logger.info "REQ_TYPE #{request_type}"
Logger.info("REQ_TYPE #{request_type}")
[path | _rest] = rest
Logger.info("PATH #{path}")
@ -44,23 +42,23 @@ defmodule RlRepo.ClientHandler do
split_path_length = length(split_path)
# TODO: Handle routing here.
case split_path_length do
1 ->
RlRepo.Router.parse_1_segment_path(split_path)
|> RlRepo.Router.route_1(request_type)
case split_path_length do
1 ->
RlRepo.Router.parse_1_segment_path(split_path)
|> RlRepo.Router.route_1(request_type)
3 ->
RlRepo.Router.parse_3_segment_path(split_path)
|> RlRepo.Router.route_3(request_type)
3 ->
RlRepo.Router.parse_3_segment_path(split_path)
|> RlRepo.Router.route_3(request_type)
4 ->
RlRepo.Router.parse_4_segment_path(split_path)
|> RlRepo.Router.route_4(request_type)
4 ->
RlRepo.Router.parse_4_segment_path(split_path)
|> RlRepo.Router.route_4(request_type)
# Note: Error handling.
_ ->
RlRepo.Router.status_404()
end
# Note: Error handling.
_ ->
RlRepo.Router.status_404()
end
end
def create_return_code_string(return_code) do
@ -73,13 +71,14 @@ defmodule RlRepo.ClientHandler do
def create_response_header(body) do
{return_code, content_type, body} = body
html_ver = "1.1"
"""
HTTP/#{html_ver} #{create_return_code_string(return_code)}\r
Content-Type: #{content_type}\r
Content-Length: #{byte_size(body)}\r
\r
#{body}
"""
"""
HTTP/#{html_ver} #{create_return_code_string(return_code)}\r
Content-Type: #{content_type}\r
Content-Length: #{byte_size(body)}\r
\r
#{body}
"""
end
def write_response(response, client_socket) do

View file

@ -3,9 +3,14 @@ defmodule RlRepo.Json do
@moduledoc """
"""
def fmt_as_json(a) do
"{\"pkg_name\": \"abc\"," <>
"\"" <>
def map_to_json(a) do
# msg = ""
"{" <>
kv_step("", "key", "value") <>
"}"
end
def kv_step(msg, key, value) do
msg <> "\"#{key}\" : \"#{value}\""
end
end

58
lib/repo/repo_lookup.ex Normal file
View file

@ -0,0 +1,58 @@
defmodule RepoLookup do
require Logger
def is_repo?(string) do
send(:repo_lookup, {"is_repo?", string, self()})
receive do
{"is_repo", value} ->
value
end
end
def repo_contains_pkg?(repo_name, pkg) do
send(:repo_lookup, {"repo_contains_pkg?", repo_name, pkg, self()})
receive do
{"repo_contains_pkg?", value} ->
value
end
end
def alias_check() do
# Set this process up to allow finding it via the :repo_lookup alias
if Enum.member?(Process.registered(), :repo_lookup) do
# Process.unalias(:repo_lookup)
end
Process.register(self(), :repo_lookup)
end
def start_repo_lookup() do
Logger.info("Repo spinning.")
alias_check()
Logger.info("Logger process alias registered")
loop_repo_lookup()
end
def loop_repo_lookup() do
Logger.info("Repo Lookup loop")
receive do
{"is_repo", value, return_pid} ->
Logger.info("Checking #{value}")
send(return_pid, {"is_repo", false})
{"repo_contains_pkg?", repo_name, pkg_name, pid}
->
Logger.info "Checking repo #{repo_name} for pkg #{pkg_name}"
send(pid, {"repo_contains_pkg?", false})
end
loop_repo_lookup()
end
end

View file

@ -13,6 +13,12 @@ defmodule RlRepo do
Logger.info("Listening on port #{port}")
# Spawn RepoLookup
Task.Supervisor.start_child(RlRepo.QueryServices, fn ->
RepoLookup.start_repo_lookup()
end)
loop_acceptor(listener_socket)
end

View file

@ -10,6 +10,8 @@ defmodule RlRepo.Application do
port = String.to_integer(System.get_env("PORT") || "10002")
children = [
{Task.Supervisor, name: RlRepo.QueryServices},
# Starts a worker by calling: RlRepo.Worker.start_link(arg)
# {RlRepo.Worker, arg}
Supervisor.child_spec({Task, fn -> RlRepo.start(port) end}, restart: :permanent)

View file

@ -28,17 +28,26 @@ defmodule RlRepo.Router do
Logger.info("#{request_type}")
{repo_name, pkg_name, action} = path
if action == "info" do
Logger.info("fetching json")
if RepoLookup.is_repo?(repo_name) do
Logger.info("#{repo_name} is a repo.")
else
Logger.info("#{repo_name} is not a repo.")
end
{200, "application/json", "{\"pkg_name\": \"#{pkg_name}\"}"}
if action == "info" do
Logger.info("fetching json")
{200, "application/json", "{\"pkg_name\": \"#{pkg_name}\"}"}
end
placeholders = %{}
# {200, "text/html", "<p>REPO_PAGE</p>"}
{200, "text/html", RlRepo.Template.template("repo", placeholders)}
end
def route_4(path, request_type) do
Logger.info("#{request_type}")
# {repo_name, sub_repo_name, pkg_name, action} = path
{200, "application/json", RlRepo.Json.fmt_as_json()}
{200, "application/json", RlRepo.Json.map_to_json(%{})}
end
def parse_1_segment_path(path) do