This commit is contained in:
2023-10-05 13:03:17 +03:00
parent 718cdb54f9
commit e037f770e5
9 changed files with 280 additions and 236 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,14 +1,14 @@
{ {
"main.js": { "main.js": {
"file": "assets/main.c3dc0395.js", "file": "assets/main.aacd1b62.js",
"src": "main.js", "src": "main.js",
"isEntry": true, "isEntry": true,
"css": [ "css": [
"assets/main.778ffe0f.css" "assets/main.632850b9.css"
] ]
}, },
"main.css": { "main.css": {
"file": "assets/main.778ffe0f.css", "file": "assets/main.632850b9.css",
"src": "main.css" "src": "main.css"
} }
} }
+1 -8
View File
@@ -7,14 +7,7 @@
const channel = getContext("channel"); const channel = getContext("channel");
const user = getContext("user"); const user = getContext("user");
function buildWebsite(e) {
e.preventDefault();
axios.post(channel.lucentUrl + "/build").then(response => {
window.location.href = channel.lucentUrl + "/build-report"
})
}
</script> </script>
<nav class="lx-nav"> <nav class="lx-nav">
@@ -27,7 +20,7 @@
<a class="nav-item" href="{channel.lucentUrl}/members">Members</a> <a class="nav-item" href="{channel.lucentUrl}/members">Members</a>
{#if channel.generateCommand} {#if channel.generateCommand}
<button on:click={buildWebsite} class="btn btn-outline-primary btn-sm">Build website</button> <a href="{channel.lucentUrl}/build-report" class="btn btn-outline-primary btn-sm">Build website</a>
{/if} {/if}
</div> </div>
<div> <div>
+19 -5
View File
@@ -8,25 +8,39 @@
const channel = getContext("channel"); const channel = getContext("channel");
export let title; export let title;
$: output = ""; $: date = "";
$: logs = "";
function buildWebsite(e) {
e.preventDefault();
axios.post(channel.lucentUrl + "/build").then(response => {
const eventSource = new EventSource(channel.lucentUrl + "/build-report-source"); const eventSource = new EventSource(channel.lucentUrl + "/build-report-source");
console.log("heklko")
eventSource.onmessage = function(event) { eventSource.onmessage = function(event) {
const data = JSON.parse(event.data); const data = JSON.parse(event.data);
console.log(data) date = data.date;
output = output + "message: " + data.time; logs = data.logs;
} }
eventSource.onerror = (e)=>{ eventSource.onerror = (e)=>{
console.log(e) console.log(e)
} }
})
}
</script> </script>
<div class="wrapper-tiny transparent mb-5"> <div class="wrapper-tiny transparent mb-5">
<div class="lx-card mt-5"> <div class="lx-card mt-5">
<h3 class="header-small mb-5">{title}</h3> <h3 class="header-small mb-5">{title}</h3>
{output} <button on:click={buildWebsite} class="btn btn-outline-primary btn-sm mb-3">Start Build</button>
<div class="mb-3">{date}</div>
<pre>{logs}</pre>
</div> </div>
</div> </div>
+20 -6
View File
@@ -22,7 +22,13 @@ class BuildController extends Controller
public function build() public function build()
{ {
exec("cd ".base_path(). " && php8.2 artisan {$this->channelService->channel->generateCommand} > /dev/null 2>&1 & echo $!",$op);
$buildLogFile = storage_path("build.log");
if(file_exists($buildLogFile)){
unlink($buildLogFile);
}
exec("cd " . base_path() . " && php8.2 artisan {$this->channelService->channel->generateCommand} > " . $buildLogFile . " 2>&1 & echo $!", $op);
$pid = (int)$op[0]; $pid = (int)$op[0];
return redirect($this->channelService->channel->lucentUrl . "/build-report"); return redirect($this->channelService->channel->lucentUrl . "/build-report");
} }
@@ -41,17 +47,25 @@ class BuildController extends Controller
{ {
return response()->stream(function () { return response()->stream(function () {
while (true) { while (true) {
$curDate = time(); $data["date"] = date("Y-m-d H:i:s");
echo 'data: {"time": "' . $curDate . '"}'; $data["logs"] = file_get_contents(storage_path("build.log"));
$lines = explode("\n",$data["logs"]);
echo 'data: ' .json_encode($data);
echo "\n\n"; echo "\n\n";
logger( $curDate);
ob_flush(); ob_flush();
flush(); flush();
if(in_array("Finito",$lines)){
break;
}
// Break the loop if the client aborted the connection (closed the page) // Break the loop if the client aborted the connection (closed the page)
if (connection_aborted()) {break;} if (connection_aborted()) {
sleep(2); // 50ms break;
}
sleep(1); // 50ms
} }
}, 200, [ }, 200, [
'Cache-Control' => 'no-cache', 'Cache-Control' => 'no-cache',
+7 -35
View File
@@ -1,51 +1,23 @@
<?php namespace Lucent\StaticGenerator; <?php namespace Lucent\StaticGenerator;
use Illuminate\Contracts\Filesystem\Filesystem;
use Illuminate\Contracts\View\View; use Illuminate\Contracts\View\View;
class StaticGenerator class StaticGenerator
{ {
public function __construct( public function __construct(
public Writer $writer,
public Filesystem $filesystem
) )
{ {
} }
public function save(string $path, string $html): void public function run(callable $callback): void
{ {
$path = trim($path, "/"); echo "Start".PHP_EOL;
$callback($this->writer);
$filepath = public_path($path . "/index.html"); echo "Finito".PHP_EOL;
if (!file_exists(pathinfo($filepath, PATHINFO_DIRNAME))) {
make_dir_r(pathinfo($filepath, PATHINFO_DIRNAME));
}
file_put_contents($filepath, $html);
}
public function recordIterator(callable $query, callable $parser, int $skip = 0): int
{
$limit = 100;
// logger("fetching $skip");
$records = $query($limit, $skip);
$parser($records);
if ($records->hasResults()) {
return $this->recordIterator($query, $parser, $skip + $limit);
}
return 0;
}
public function createRedirect(string $from, string $to, string $title = "Redirecting", string $message = "Redirecting Soon..."): void
{
$html = view("lucent::redirect", [
"to" => $to,
"title" => $title,
"message" => $message,
])->render();
$this->save($from, $html);
} }
} }
+52
View File
@@ -0,0 +1,52 @@
<?php namespace Lucent\StaticGenerator;
use Illuminate\Contracts\View\View;
class Writer
{
public function __construct(
)
{
}
public function save(string $path, string $html): void
{
$path = trim($path, "/");
$filepath = public_path($path . "/index.html");
if (!file_exists(pathinfo($filepath, PATHINFO_DIRNAME))) {
make_dir_r(pathinfo($filepath, PATHINFO_DIRNAME));
}
file_put_contents($filepath, $html);
echo "Path: /$path".PHP_EOL;
}
public function recordIterator(callable $query, callable $parser, int $skip = 0): int
{
$limit = 100;
// logger("fetching $skip");
$records = $query($limit, $skip);
$parser($records);
if ($records->hasResults()) {
return $this->recordIterator($query, $parser, $skip + $limit);
}
return 0;
}
public function createRedirect(string $from, string $to, string $title = "Redirecting", string $message = "Redirecting Soon..."): void
{
$html = view("lucent::redirect", [
"to" => $to,
"title" => $title,
"message" => $message,
])->render();
$this->save($from, $html);
}
}