skypilot-nightly 1.0.0.dev20250927__py3-none-any.whl → 1.0.0.dev20251001__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of skypilot-nightly might be problematic. Click here for more details.
- sky/__init__.py +2 -2
- sky/backends/backend_utils.py +18 -10
- sky/backends/cloud_vm_ray_backend.py +2 -2
- sky/check.py +0 -29
- sky/client/cli/command.py +46 -25
- sky/client/cli/table_utils.py +58 -1
- sky/client/sdk.py +7 -18
- sky/core.py +15 -16
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs/pools/{[pool]-07349868f7905d37.js → [pool]-509b2977a6373bf6.js} +1 -1
- sky/dashboard/out/_next/static/chunks/{webpack-7340bc0f0dd8ae74.js → webpack-4f0c389a4ce5fd9c.js} +1 -1
- sky/dashboard/out/_next/static/{UDSEoDB67vwFMZyCJ4HWU → m3YT2i5s6v4SsIdYc8WZa}/_buildManifest.js +1 -1
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -1
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/data/storage.py +11 -0
- sky/data/storage_utils.py +1 -45
- sky/jobs/client/sdk.py +3 -2
- sky/jobs/controller.py +15 -0
- sky/jobs/server/core.py +24 -2
- sky/jobs/server/server.py +1 -1
- sky/jobs/utils.py +2 -1
- sky/provision/kubernetes/instance.py +1 -1
- sky/schemas/api/responses.py +55 -0
- sky/server/common.py +2 -1
- sky/server/requests/serializers/decoders.py +8 -4
- sky/server/requests/serializers/encoders.py +6 -5
- sky/task.py +4 -0
- sky/utils/cluster_utils.py +23 -5
- sky/utils/command_runner.py +21 -5
- sky/utils/command_runner.pyi +11 -0
- sky/utils/volume.py +5 -0
- {skypilot_nightly-1.0.0.dev20250927.dist-info → skypilot_nightly-1.0.0.dev20251001.dist-info}/METADATA +37 -37
- {skypilot_nightly-1.0.0.dev20250927.dist-info → skypilot_nightly-1.0.0.dev20251001.dist-info}/RECORD +51 -51
- /sky/dashboard/out/_next/static/{UDSEoDB67vwFMZyCJ4HWU → m3YT2i5s6v4SsIdYc8WZa}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250927.dist-info → skypilot_nightly-1.0.0.dev20251001.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250927.dist-info → skypilot_nightly-1.0.0.dev20251001.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250927.dist-info → skypilot_nightly-1.0.0.dev20251001.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250927.dist-info → skypilot_nightly-1.0.0.dev20251001.dist-info}/top_level.txt +0 -0
sky/__init__.py
CHANGED
|
@@ -7,7 +7,7 @@ import urllib.request
|
|
|
7
7
|
from sky.utils import directory_utils
|
|
8
8
|
|
|
9
9
|
# Replaced with the current commit when building the wheels.
|
|
10
|
-
_SKYPILOT_COMMIT_SHA = '
|
|
10
|
+
_SKYPILOT_COMMIT_SHA = '047e366ad4c073a5753b62cc5d4c3c4660b1476a'
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _get_git_commit():
|
|
@@ -37,7 +37,7 @@ def _get_git_commit():
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
__commit__ = _get_git_commit()
|
|
40
|
-
__version__ = '1.0.0.
|
|
40
|
+
__version__ = '1.0.0.dev20251001'
|
|
41
41
|
__root_dir__ = directory_utils.get_sky_dir()
|
|
42
42
|
|
|
43
43
|
|
sky/backends/backend_utils.py
CHANGED
|
@@ -723,11 +723,15 @@ def write_cluster_config(
|
|
|
723
723
|
'is not supported by this cloud. Remove the config or set: '
|
|
724
724
|
'`remote_identity: LOCAL_CREDENTIALS`.')
|
|
725
725
|
if isinstance(cloud, clouds.Kubernetes):
|
|
726
|
-
|
|
726
|
+
allowed_contexts = skypilot_config.get_workspace_cloud(
|
|
727
|
+
'kubernetes').get('allowed_contexts', None)
|
|
728
|
+
if allowed_contexts is None:
|
|
729
|
+
allowed_contexts = skypilot_config.get_effective_region_config(
|
|
727
730
|
cloud='kubernetes',
|
|
728
731
|
region=None,
|
|
729
732
|
keys=('allowed_contexts',),
|
|
730
|
-
default_value=None)
|
|
733
|
+
default_value=None)
|
|
734
|
+
if allowed_contexts is None:
|
|
731
735
|
excluded_clouds.add(cloud)
|
|
732
736
|
else:
|
|
733
737
|
excluded_clouds.add(cloud)
|
|
@@ -2613,7 +2617,7 @@ def refresh_cluster_record(
|
|
|
2613
2617
|
cluster_name: str,
|
|
2614
2618
|
*,
|
|
2615
2619
|
force_refresh_statuses: Optional[Set[status_lib.ClusterStatus]] = None,
|
|
2616
|
-
|
|
2620
|
+
cluster_lock_already_held: bool = False,
|
|
2617
2621
|
cluster_status_lock_timeout: int = CLUSTER_STATUS_LOCK_TIMEOUT_SECONDS,
|
|
2618
2622
|
include_user_info: bool = True,
|
|
2619
2623
|
summary_response: bool = False) -> Optional[Dict[str, Any]]:
|
|
@@ -2633,9 +2637,13 @@ def refresh_cluster_record(
|
|
|
2633
2637
|
_CLUSTER_STATUS_CACHE_DURATION_SECONDS old, and one of:
|
|
2634
2638
|
1. the cluster is a spot cluster, or
|
|
2635
2639
|
2. cluster autostop is set and the cluster is not STOPPED.
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2640
|
+
cluster_lock_already_held: Whether the caller is already holding the
|
|
2641
|
+
per-cluster lock. You MUST NOT set this to True if the caller does not
|
|
2642
|
+
already hold the lock. If True, we will not acquire the lock before
|
|
2643
|
+
updating the status. Failing to hold the lock while updating the
|
|
2644
|
+
status can lead to correctness issues - e.g. an launch in-progress may
|
|
2645
|
+
appear to be DOWN incorrectly. Even if this is set to False, the lock
|
|
2646
|
+
may not be acquired if the status does not need to be refreshed.
|
|
2639
2647
|
cluster_status_lock_timeout: The timeout to acquire the per-cluster
|
|
2640
2648
|
lock. If timeout, the function will use the cached status. If the
|
|
2641
2649
|
value is <0, do not timeout (wait for the lock indefinitely). By
|
|
@@ -2686,7 +2694,7 @@ def refresh_cluster_record(
|
|
|
2686
2694
|
if not _must_refresh_cluster_status(record, force_refresh_statuses):
|
|
2687
2695
|
return record
|
|
2688
2696
|
|
|
2689
|
-
if
|
|
2697
|
+
if cluster_lock_already_held:
|
|
2690
2698
|
return _update_cluster_status(cluster_name, include_user_info,
|
|
2691
2699
|
summary_response)
|
|
2692
2700
|
|
|
@@ -2740,7 +2748,7 @@ def refresh_cluster_status_handle(
|
|
|
2740
2748
|
cluster_name: str,
|
|
2741
2749
|
*,
|
|
2742
2750
|
force_refresh_statuses: Optional[Set[status_lib.ClusterStatus]] = None,
|
|
2743
|
-
|
|
2751
|
+
cluster_lock_already_held: bool = False,
|
|
2744
2752
|
cluster_status_lock_timeout: int = CLUSTER_STATUS_LOCK_TIMEOUT_SECONDS
|
|
2745
2753
|
) -> Tuple[Optional[status_lib.ClusterStatus],
|
|
2746
2754
|
Optional[backends.ResourceHandle]]:
|
|
@@ -2753,7 +2761,7 @@ def refresh_cluster_status_handle(
|
|
|
2753
2761
|
record = refresh_cluster_record(
|
|
2754
2762
|
cluster_name,
|
|
2755
2763
|
force_refresh_statuses=force_refresh_statuses,
|
|
2756
|
-
|
|
2764
|
+
cluster_lock_already_held=cluster_lock_already_held,
|
|
2757
2765
|
cluster_status_lock_timeout=cluster_status_lock_timeout,
|
|
2758
2766
|
include_user_info=False,
|
|
2759
2767
|
summary_response=True)
|
|
@@ -3078,7 +3086,7 @@ def _refresh_cluster(
|
|
|
3078
3086
|
record = refresh_cluster_record(
|
|
3079
3087
|
cluster_name,
|
|
3080
3088
|
force_refresh_statuses=force_refresh_statuses,
|
|
3081
|
-
|
|
3089
|
+
cluster_lock_already_held=False,
|
|
3082
3090
|
include_user_info=include_user_info,
|
|
3083
3091
|
summary_response=summary_response)
|
|
3084
3092
|
except (exceptions.ClusterStatusFetchingError,
|
|
@@ -5121,7 +5121,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
5121
5121
|
# observed in AWS. See also
|
|
5122
5122
|
# _LAUNCH_DOUBLE_CHECK_WINDOW in backend_utils.py.
|
|
5123
5123
|
force_refresh_statuses={status_lib.ClusterStatus.INIT},
|
|
5124
|
-
|
|
5124
|
+
cluster_lock_already_held=True))
|
|
5125
5125
|
cluster_status_fetched = True
|
|
5126
5126
|
except exceptions.ClusterStatusFetchingError:
|
|
5127
5127
|
logger.warning(
|
|
@@ -5725,7 +5725,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
5725
5725
|
record = backend_utils.refresh_cluster_record(
|
|
5726
5726
|
cluster_name,
|
|
5727
5727
|
force_refresh_statuses={status_lib.ClusterStatus.INIT},
|
|
5728
|
-
|
|
5728
|
+
cluster_lock_already_held=True,
|
|
5729
5729
|
include_user_info=False,
|
|
5730
5730
|
summary_response=True,
|
|
5731
5731
|
)
|
sky/check.py
CHANGED
|
@@ -621,35 +621,6 @@ def _format_enabled_cloud(cloud_name: str,
|
|
|
621
621
|
if cloud_name in [repr(sky_clouds.Kubernetes()), repr(sky_clouds.SSH())]:
|
|
622
622
|
return (f'{title}' + _format_context_details(
|
|
623
623
|
cloud_name, show_details=False, ctx2text=ctx2text))
|
|
624
|
-
|
|
625
|
-
if cloud_name == repr(sky_clouds.Kubernetes()):
|
|
626
|
-
# Get enabled contexts for Kubernetes
|
|
627
|
-
existing_contexts = sky_clouds.Kubernetes.existing_allowed_contexts()
|
|
628
|
-
if not existing_contexts:
|
|
629
|
-
return _green_color(cloud_and_capabilities)
|
|
630
|
-
|
|
631
|
-
# Check if allowed_contexts is explicitly set in config
|
|
632
|
-
allowed_contexts = skypilot_config.get_effective_region_config(
|
|
633
|
-
cloud='kubernetes',
|
|
634
|
-
region=None,
|
|
635
|
-
keys=('allowed_contexts',),
|
|
636
|
-
default_value=None)
|
|
637
|
-
|
|
638
|
-
# Format the context info with consistent styling
|
|
639
|
-
if allowed_contexts is not None:
|
|
640
|
-
contexts_formatted = []
|
|
641
|
-
for i, context in enumerate(existing_contexts):
|
|
642
|
-
symbol = (ux_utils.INDENT_LAST_SYMBOL
|
|
643
|
-
if i == len(existing_contexts) -
|
|
644
|
-
1 else ux_utils.INDENT_SYMBOL)
|
|
645
|
-
contexts_formatted.append(f'\n {symbol}{context}')
|
|
646
|
-
context_info = f' Allowed contexts:{"".join(contexts_formatted)}'
|
|
647
|
-
else:
|
|
648
|
-
context_info = f' Active context: {existing_contexts[0]}'
|
|
649
|
-
|
|
650
|
-
return (f'{_green_color(cloud_and_capabilities)}\n'
|
|
651
|
-
f' {colorama.Style.DIM}{context_info}'
|
|
652
|
-
f'{colorama.Style.RESET_ALL}')
|
|
653
624
|
return _green_color(cloud_and_capabilities)
|
|
654
625
|
|
|
655
626
|
|
sky/client/cli/command.py
CHANGED
|
@@ -60,7 +60,6 @@ from sky.adaptors import common as adaptors_common
|
|
|
60
60
|
from sky.client import sdk
|
|
61
61
|
from sky.client.cli import flags
|
|
62
62
|
from sky.client.cli import table_utils
|
|
63
|
-
from sky.data import storage_utils
|
|
64
63
|
from sky.provision.kubernetes import constants as kubernetes_constants
|
|
65
64
|
from sky.provision.kubernetes import utils as kubernetes_utils
|
|
66
65
|
from sky.schemas.api import responses
|
|
@@ -88,6 +87,7 @@ from sky.utils import status_lib
|
|
|
88
87
|
from sky.utils import subprocess_utils
|
|
89
88
|
from sky.utils import timeline
|
|
90
89
|
from sky.utils import ux_utils
|
|
90
|
+
from sky.utils import volume as volume_utils
|
|
91
91
|
from sky.utils import yaml_utils
|
|
92
92
|
from sky.utils.cli_utils import status_utils
|
|
93
93
|
from sky.volumes import utils as volumes_utils
|
|
@@ -1322,7 +1322,7 @@ def exec(
|
|
|
1322
1322
|
|
|
1323
1323
|
|
|
1324
1324
|
def _handle_jobs_queue_request(
|
|
1325
|
-
request_id: server_common.RequestId[List[
|
|
1325
|
+
request_id: server_common.RequestId[List[responses.ManagedJobRecord]],
|
|
1326
1326
|
show_all: bool,
|
|
1327
1327
|
show_user: bool,
|
|
1328
1328
|
max_num_jobs_to_show: Optional[int],
|
|
@@ -1395,10 +1395,10 @@ def _handle_jobs_queue_request(
|
|
|
1395
1395
|
msg += ('Failed to query managed jobs: '
|
|
1396
1396
|
f'{common_utils.format_exception(e, use_bracket=True)}')
|
|
1397
1397
|
else:
|
|
1398
|
-
msg =
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1398
|
+
msg = table_utils.format_job_table(managed_jobs_,
|
|
1399
|
+
show_all=show_all,
|
|
1400
|
+
show_user=show_user,
|
|
1401
|
+
max_jobs=max_num_jobs_to_show)
|
|
1402
1402
|
return num_in_progress_jobs, msg
|
|
1403
1403
|
|
|
1404
1404
|
|
|
@@ -1513,9 +1513,9 @@ def _status_kubernetes(show_all: bool):
|
|
|
1513
1513
|
click.echo(f'\n{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
|
|
1514
1514
|
f'Managed jobs'
|
|
1515
1515
|
f'{colorama.Style.RESET_ALL}')
|
|
1516
|
-
msg =
|
|
1517
|
-
|
|
1518
|
-
|
|
1516
|
+
msg = table_utils.format_job_table(all_jobs,
|
|
1517
|
+
show_all=show_all,
|
|
1518
|
+
show_user=False)
|
|
1519
1519
|
click.echo(msg)
|
|
1520
1520
|
if any(['sky-serve-controller' in c.cluster_name for c in all_clusters]):
|
|
1521
1521
|
# TODO: Parse serve controllers and show services separately.
|
|
@@ -2963,9 +2963,9 @@ def _hint_or_raise_for_down_jobs_controller(controller_name: str,
|
|
|
2963
2963
|
'jobs (output of `sky jobs queue`) will be lost.')
|
|
2964
2964
|
click.echo(msg)
|
|
2965
2965
|
if managed_jobs_:
|
|
2966
|
-
job_table =
|
|
2967
|
-
|
|
2968
|
-
|
|
2966
|
+
job_table = table_utils.format_job_table(managed_jobs_,
|
|
2967
|
+
show_all=False,
|
|
2968
|
+
show_user=True)
|
|
2969
2969
|
msg = controller.value.decline_down_for_dirty_controller_hint
|
|
2970
2970
|
# Add prefix to each line to align with the bullet point.
|
|
2971
2971
|
msg += '\n'.join(
|
|
@@ -4027,8 +4027,7 @@ def storage_ls(verbose: bool):
|
|
|
4027
4027
|
"""List storage objects managed by SkyPilot."""
|
|
4028
4028
|
request_id = sdk.storage_ls()
|
|
4029
4029
|
storages = sdk.stream_and_get(request_id)
|
|
4030
|
-
storage_table =
|
|
4031
|
-
show_all=verbose)
|
|
4030
|
+
storage_table = table_utils.format_storage_table(storages, show_all=verbose)
|
|
4032
4031
|
click.echo(storage_table)
|
|
4033
4032
|
|
|
4034
4033
|
|
|
@@ -4123,13 +4122,15 @@ def volumes():
|
|
|
4123
4122
|
@click.option('--infra',
|
|
4124
4123
|
required=False,
|
|
4125
4124
|
type=str,
|
|
4126
|
-
help='
|
|
4125
|
+
help='Infrastructure to use. '
|
|
4126
|
+
'Format: cloud, cloud/region, cloud/region/zone, or '
|
|
4127
|
+
'k8s/context-name.'
|
|
4128
|
+
'Examples: k8s, k8s/my-context, runpod/US/US-CA-2. '
|
|
4127
4129
|
'Override the infra defined in the YAML.')
|
|
4128
|
-
@click.option(
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
|
-
help='Volume type. Format: pvc. Override the type defined in the YAML.')
|
|
4130
|
+
@click.option('--type',
|
|
4131
|
+
required=False,
|
|
4132
|
+
type=click.Choice(volume_utils.VolumeType.supported_types()),
|
|
4133
|
+
help='Volume type. Override the type defined in the YAML.')
|
|
4133
4134
|
@click.option('--size',
|
|
4134
4135
|
required=False,
|
|
4135
4136
|
type=str,
|
|
@@ -4160,7 +4161,7 @@ def volumes_apply(
|
|
|
4160
4161
|
sky volumes apply volume.yaml
|
|
4161
4162
|
\b
|
|
4162
4163
|
# Apply a volume from a command.
|
|
4163
|
-
sky volumes apply --name pvc1 --infra k8s --type pvc --size 100Gi
|
|
4164
|
+
sky volumes apply --name pvc1 --infra k8s --type k8s-pvc --size 100Gi
|
|
4164
4165
|
"""
|
|
4165
4166
|
# pylint: disable=import-outside-toplevel
|
|
4166
4167
|
from sky.volumes import volume as volume_lib
|
|
@@ -4497,10 +4498,30 @@ def jobs_launch(
|
|
|
4497
4498
|
job_id_handle = _async_call_or_wait(request_id, async_call,
|
|
4498
4499
|
'sky.jobs.launch')
|
|
4499
4500
|
|
|
4500
|
-
if
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4501
|
+
if async_call:
|
|
4502
|
+
return
|
|
4503
|
+
|
|
4504
|
+
job_ids = [job_id_handle[0]] if isinstance(job_id_handle[0],
|
|
4505
|
+
int) else job_id_handle[0]
|
|
4506
|
+
if pool:
|
|
4507
|
+
# Display the worker assignment for the jobs.
|
|
4508
|
+
logger.debug(f'Getting service records for pool: {pool}')
|
|
4509
|
+
records_request_id = managed_jobs.pool_status(pool_names=pool)
|
|
4510
|
+
service_records = _async_call_or_wait(records_request_id, async_call,
|
|
4511
|
+
'sky.jobs.pool_status')
|
|
4512
|
+
logger.debug(f'Pool status: {service_records}')
|
|
4513
|
+
replica_infos = service_records[0]['replica_info']
|
|
4514
|
+
for replica_info in replica_infos:
|
|
4515
|
+
job_id = replica_info.get('used_by', None)
|
|
4516
|
+
if job_id in job_ids:
|
|
4517
|
+
worker_id = replica_info['replica_id']
|
|
4518
|
+
version = replica_info['version']
|
|
4519
|
+
logger.info(f'Job ID: {job_id} assigned to pool {pool} '
|
|
4520
|
+
f'(worker: {worker_id}, version: {version})')
|
|
4521
|
+
|
|
4522
|
+
if not detach_run:
|
|
4523
|
+
if len(job_ids) == 1:
|
|
4524
|
+
job_id = job_ids[0]
|
|
4504
4525
|
returncode = managed_jobs.tail_logs(name=None,
|
|
4505
4526
|
job_id=job_id,
|
|
4506
4527
|
follow=True,
|
sky/client/cli/table_utils.py
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"""Utilities for formatting tables for CLI output."""
|
|
2
|
-
from typing import List
|
|
2
|
+
from typing import List, Optional
|
|
3
3
|
|
|
4
|
+
from sky.jobs import utils as managed_jobs
|
|
4
5
|
from sky.schemas.api import responses
|
|
6
|
+
from sky.skylet import constants
|
|
7
|
+
from sky.utils import common_utils
|
|
5
8
|
from sky.utils import log_utils
|
|
6
9
|
|
|
7
10
|
|
|
@@ -32,3 +35,57 @@ def format_job_queue(jobs: List[responses.ClusterJobRecord]):
|
|
|
32
35
|
job.metadata.get('git_commit', '-'),
|
|
33
36
|
])
|
|
34
37
|
return job_table
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def format_storage_table(storages: List[responses.StorageRecord],
|
|
41
|
+
show_all: bool = False) -> str:
|
|
42
|
+
"""Format the storage table for display.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
storage_table (dict): The storage table.
|
|
46
|
+
|
|
47
|
+
Returns:
|
|
48
|
+
str: The formatted storage table.
|
|
49
|
+
"""
|
|
50
|
+
storage_table = log_utils.create_table([
|
|
51
|
+
'NAME',
|
|
52
|
+
'UPDATED',
|
|
53
|
+
'STORE',
|
|
54
|
+
'COMMAND',
|
|
55
|
+
'STATUS',
|
|
56
|
+
])
|
|
57
|
+
|
|
58
|
+
for row in storages:
|
|
59
|
+
launched_at = row.launched_at
|
|
60
|
+
if show_all:
|
|
61
|
+
command = row.last_use
|
|
62
|
+
else:
|
|
63
|
+
command = common_utils.truncate_long_string(
|
|
64
|
+
row.last_use, constants.LAST_USE_TRUNC_LENGTH)
|
|
65
|
+
storage_table.add_row([
|
|
66
|
+
# NAME
|
|
67
|
+
row.name,
|
|
68
|
+
# LAUNCHED
|
|
69
|
+
log_utils.readable_time_duration(launched_at),
|
|
70
|
+
# CLOUDS
|
|
71
|
+
', '.join([s.value for s in row.store]),
|
|
72
|
+
# COMMAND,
|
|
73
|
+
command,
|
|
74
|
+
# STATUS
|
|
75
|
+
row.status.value,
|
|
76
|
+
])
|
|
77
|
+
if storages:
|
|
78
|
+
return str(storage_table)
|
|
79
|
+
else:
|
|
80
|
+
return 'No existing storage.'
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def format_job_table(jobs: List[responses.ManagedJobRecord],
|
|
84
|
+
show_all: bool,
|
|
85
|
+
show_user: bool,
|
|
86
|
+
max_jobs: Optional[int] = None):
|
|
87
|
+
jobs = [job.model_dump() for job in jobs]
|
|
88
|
+
return managed_jobs.format_job_table(jobs,
|
|
89
|
+
show_all=show_all,
|
|
90
|
+
show_user=show_user,
|
|
91
|
+
max_jobs=max_jobs)
|
sky/client/sdk.py
CHANGED
|
@@ -1618,26 +1618,15 @@ def cost_report(
|
|
|
1618
1618
|
@usage_lib.entrypoint
|
|
1619
1619
|
@server_common.check_server_healthy_or_start
|
|
1620
1620
|
@annotations.client_api
|
|
1621
|
-
def storage_ls() -> server_common.RequestId[List[
|
|
1621
|
+
def storage_ls() -> server_common.RequestId[List[responses.StorageRecord]]:
|
|
1622
1622
|
"""Gets the storages.
|
|
1623
1623
|
|
|
1624
1624
|
Returns:
|
|
1625
1625
|
The request ID of the storage list request.
|
|
1626
1626
|
|
|
1627
1627
|
Request Returns:
|
|
1628
|
-
storage_records (List[
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
.. code-block:: python
|
|
1632
|
-
|
|
1633
|
-
{
|
|
1634
|
-
'name': (str) storage name,
|
|
1635
|
-
'launched_at': (int) timestamp of creation,
|
|
1636
|
-
'store': (List[sky.StoreType]) storage type,
|
|
1637
|
-
'last_use': (int) timestamp of last use,
|
|
1638
|
-
'status': (sky.StorageStatus) storage status,
|
|
1639
|
-
}
|
|
1640
|
-
]
|
|
1628
|
+
storage_records (List[responses.StorageRecord]):
|
|
1629
|
+
A list of storage records.
|
|
1641
1630
|
"""
|
|
1642
1631
|
response = server_common.make_authenticated_request('GET', '/storage/ls')
|
|
1643
1632
|
return server_common.get_request_id(response)
|
|
@@ -1912,10 +1901,10 @@ def kubernetes_node_info(
|
|
|
1912
1901
|
@usage_lib.entrypoint
|
|
1913
1902
|
@server_common.check_server_healthy_or_start
|
|
1914
1903
|
@annotations.client_api
|
|
1915
|
-
def status_kubernetes() -> server_common.RequestId[
|
|
1916
|
-
List['kubernetes_utils.KubernetesSkyPilotClusterInfoPayload'],
|
|
1917
|
-
|
|
1918
|
-
|
|
1904
|
+
def status_kubernetes() -> server_common.RequestId[
|
|
1905
|
+
Tuple[List['kubernetes_utils.KubernetesSkyPilotClusterInfoPayload'],
|
|
1906
|
+
List['kubernetes_utils.KubernetesSkyPilotClusterInfoPayload'],
|
|
1907
|
+
List[responses.ManagedJobRecord], Optional[str]]]:
|
|
1919
1908
|
"""Gets all SkyPilot clusters and jobs in the Kubernetes cluster.
|
|
1920
1909
|
|
|
1921
1910
|
Managed jobs and services are also included in the clusters returned.
|
sky/core.py
CHANGED
|
@@ -195,7 +195,7 @@ def status(
|
|
|
195
195
|
def status_kubernetes(
|
|
196
196
|
) -> Tuple[List['kubernetes_utils.KubernetesSkyPilotClusterInfoPayload'],
|
|
197
197
|
List['kubernetes_utils.KubernetesSkyPilotClusterInfoPayload'],
|
|
198
|
-
List[
|
|
198
|
+
List[responses.ManagedJobRecord], Optional[str]]:
|
|
199
199
|
"""Gets all SkyPilot clusters and jobs in the Kubernetes cluster.
|
|
200
200
|
|
|
201
201
|
Managed jobs and services are also included in the clusters returned.
|
|
@@ -270,6 +270,7 @@ all_clusters, unmanaged_clusters, all_jobs, context
|
|
|
270
270
|
kubernetes_utils.KubernetesSkyPilotClusterInfoPayload.from_cluster(c)
|
|
271
271
|
for c in unmanaged_clusters
|
|
272
272
|
]
|
|
273
|
+
all_jobs = [responses.ManagedJobRecord(**job) for job in all_jobs]
|
|
273
274
|
return all_clusters, unmanaged_clusters, all_jobs, context
|
|
274
275
|
|
|
275
276
|
|
|
@@ -1130,25 +1131,25 @@ def job_status(cluster_name: str,
|
|
|
1130
1131
|
# = Storage Management =
|
|
1131
1132
|
# ======================
|
|
1132
1133
|
@usage_lib.entrypoint
|
|
1133
|
-
def storage_ls() -> List[
|
|
1134
|
+
def storage_ls() -> List[responses.StorageRecord]:
|
|
1134
1135
|
# NOTE(dev): Keep the docstring consistent between the Python API and CLI.
|
|
1135
1136
|
"""Gets the storages.
|
|
1136
1137
|
|
|
1137
1138
|
Returns:
|
|
1138
|
-
[
|
|
1139
|
-
{
|
|
1140
|
-
'name': str,
|
|
1141
|
-
'launched_at': int timestamp of creation,
|
|
1142
|
-
'store': List[sky.StoreType],
|
|
1143
|
-
'last_use': int timestamp of last use,
|
|
1144
|
-
'status': sky.StorageStatus,
|
|
1145
|
-
}
|
|
1146
|
-
]
|
|
1139
|
+
List[responses.StorageRecord]: A list of storage records.
|
|
1147
1140
|
"""
|
|
1148
1141
|
storages = global_user_state.get_storage()
|
|
1142
|
+
storage_records = []
|
|
1149
1143
|
for storage in storages:
|
|
1150
|
-
|
|
1151
|
-
|
|
1144
|
+
storage_records.append(
|
|
1145
|
+
responses.StorageRecord(
|
|
1146
|
+
name=storage['name'],
|
|
1147
|
+
launched_at=storage['launched_at'],
|
|
1148
|
+
store=list(storage.pop('handle').sky_stores.keys()),
|
|
1149
|
+
last_use=storage['last_use'],
|
|
1150
|
+
status=storage['status'],
|
|
1151
|
+
))
|
|
1152
|
+
return storage_records
|
|
1152
1153
|
|
|
1153
1154
|
|
|
1154
1155
|
@usage_lib.entrypoint
|
|
@@ -1164,9 +1165,7 @@ def storage_delete(name: str) -> None:
|
|
|
1164
1165
|
if handle is None:
|
|
1165
1166
|
raise ValueError(f'Storage name {name!r} not found.')
|
|
1166
1167
|
else:
|
|
1167
|
-
storage_object = data.Storage(
|
|
1168
|
-
source=handle.source,
|
|
1169
|
-
sync_on_reconstruction=False)
|
|
1168
|
+
storage_object = data.Storage.from_handle(handle)
|
|
1170
1169
|
storage_object.delete()
|
|
1171
1170
|
|
|
1172
1171
|
|
sky/dashboard/out/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-4f0c389a4ce5fd9c.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/m3YT2i5s6v4SsIdYc8WZa/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/m3YT2i5s6v4SsIdYc8WZa/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"m3YT2i5s6v4SsIdYc8WZa","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
*
|
|
14
14
|
* This source code is licensed under the ISC license.
|
|
15
15
|
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/let u=(0,s(60998).Z)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);var h=s(70282),x=s(27325),m=s(45895),f=s(6639),p=s(68969),g=s(6378),N=s(36989),j=s(51214),b=s(99307),y=s(84303),v=s(1125),w=s(68764),E=s(30803);function _(){let e=(0,a.useRouter)(),{pool:t}=e.query,[s,l]=(0,n.useState)(null),[i,_]=(0,n.useState)(!1),[L,k]=(0,n.useState)(!0),[I,C]=(0,n.useState)(null),[R,A]=(0,n.useState)(1),[S,T]=(0,n.useState)(10),[D,O]=(0,n.useState)(!1),[P,M]=(0,n.useState)({key:null,direction:"ascending"}),[F,W]=(0,n.useState)(!1),[U,Y]=(0,n.useState)(!1),[Z,G]=(0,n.useState)(!1),H=n.useCallback(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t){e?_(!0):k(!0),C(null);try{let{pools:e=[]}=await g.default.get(p.vs,[{}])||{},s=e.find(e=>e.name===t);s?l(s):(C("Pool ".concat(t," not found")),l(null))}catch(e){console.error("Error fetching pool data:",e),C("Failed to fetch pool data: ".concat(e.message)),l(null)}finally{e?_(!1):k(!1)}}},[t,_,k,C,l]);(0,n.useEffect)(()=>{H()},[t,H]);let z=e=>{let t="ascending";P.key===e&&"ascending"===P.direction&&(t="descending"),M({key:e,direction:t})},B=e=>P.key===e?"ascending"===P.direction?" ↑":" ↓":"",q=async()=>{try{if(s&&s.pool_yaml){let e=(0,y._q)(s.pool_yaml);await navigator.clipboard.writeText(e),Y(!0),setTimeout(()=>Y(!1),2e3)}}catch(e){console.error("Failed to copy Pool YAML to clipboard:",e)}},K=async()=>{try{s&&s.entrypoint&&(await navigator.clipboard.writeText(s.entrypoint),G(!0),setTimeout(()=>G(!1),2e3))}catch(e){console.error("Failed to copy entrypoint to clipboard:",e)}},{filteredWorkers:V,totalPages:J,paginatedWorkers:X}=(0,n.useMemo)(()=>{if(!s||!s.replica_info)return{filteredWorkers:[],totalPages:0,paginatedWorkers:[]};let e=D?s.replica_info:s.replica_info.filter(e=>!e.status||!e.status.includes("FAILED"));P.key&&(e=[...e].sort((e,t)=>{let s=e[P.key],r=t[P.key];return("launched_at"===P.key&&(s=s||0,r=r||0),"string"==typeof s&&(s=s.toLowerCase()),"string"==typeof r&&(r=r.toLowerCase()),s<r)?"ascending"===P.direction?-1:1:s>r?"ascending"===P.direction?1:-1:0}));let t=Math.ceil(e.length/S),r=(R-1)*S,n=r+S,a=e.slice(r,n);return{filteredWorkers:e,totalPages:t,paginatedWorkers:a}},[s,D,R,S,P]);return((0,n.useEffect)(()=>{A(1)},[D,P]),!e.isReady||L)?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c(),{children:(0,r.jsxs)("title",{children:["Pool ",t," | SkyPilot Dashboard"]})}),(0,r.jsx)("div",{className:"min-h-screen flex items-center justify-center",children:(0,r.jsxs)("div",{className:"flex flex-col items-center",children:[(0,r.jsx)(d.Z,{size:32,className:"mb-3"}),(0,r.jsx)("span",{className:"text-gray-600",children:"Loading pool details..."})]})})]}):I||!s?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c(),{children:(0,r.jsxs)("title",{children:["Pool ",t," | SkyPilot Dashboard"]})}),(0,r.jsx)("div",{className:"bg-white shadow rounded-lg p-6",children:(0,r.jsxs)("div",{className:"text-center text-red-600",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold mb-2",children:"Error"}),(0,r.jsx)("p",{children:I||"Pool ".concat(t," not found")}),(0,r.jsx)("button",{onClick:()=>{g.default.invalidate(p.vs,[{}]),H(!0)},className:"mt-4 bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600",children:"Retry"})]})})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c(),{children:(0,r.jsxs)("title",{children:["Pool ",t," | SkyPilot Dashboard"]})}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,r.jsxs)("div",{className:"text-base flex items-center",children:[(0,r.jsx)(o(),{href:"/jobs",className:"text-sky-blue hover:underline",children:"Pools"}),(0,r.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,r.jsx)(o(),{href:"/jobs/pools/".concat(t),className:"text-sky-blue hover:underline",children:t})]}),(0,r.jsxs)("div",{className:"text-sm flex items-center",children:[i&&(0,r.jsxs)("div",{className:"flex items-center mr-4",children:[(0,r.jsx)(d.Z,{size:15,className:"mt-0"}),(0,r.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),(0,r.jsxs)("button",{onClick:()=>{g.default.invalidate(p.vs,[{}]),H(!0)},disabled:i,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,r.jsx)(u,{className:"w-4 h-4 mr-1.5 ".concat(i?"animate-spin":"")}),(0,r.jsx)("span",{children:"Refresh"})]})]})]}),(0,r.jsxs)("div",{className:"w-full flex flex-col space-y-6",children:[(0,r.jsx)("div",{className:"mb-6",children:(0,r.jsxs)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:[(0,r.jsx)("div",{className:"flex items-center justify-between px-4 pt-4",children:(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Details"})}),(0,r.jsxs)("div",{className:"p-4",children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Jobs"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(N.x9,{jobCounts:(0,N.sY)(s),getStatusStyle:b.Cl})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Workers"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(e=>{if(!e||!e.replica_info||0===e.replica_info.length)return"0 (target: 0)";let t=e.replica_info.filter(e=>"READY"===e.status).length,s=e.target_num_replicas||0;return"".concat(t," (target: ").concat(s,")")})(s)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Worker Details"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(N.Kl,{replicaInfo:s.replica_info})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Worker Resources"}),(0,r.jsx)("div",{className:"text-base mt-1",children:s.requested_resources_str||"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Policy"}),(0,r.jsx)("div",{className:"text-base mt-1",children:s.policy||"-"})]})]}),s.entrypoint&&(0,r.jsxs)("div",{className:"pt-4 mt-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Entrypoint"}),(0,r.jsx)(N.WH,{content:Z?"Copied!":"Copy command",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:K,className:"flex items-center text-gray-500 hover:text-gray-700 transition-colors duration-200 p-1 ml-2",children:Z?(0,r.jsx)(h.Z,{className:"w-4 h-4 text-green-600"}):(0,r.jsx)(x.Z,{className:"w-4 h-4"})})})]}),(0,r.jsx)("div",{className:"mt-3",children:(0,r.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-md p-3",children:(0,r.jsx)("code",{className:"text-sm text-gray-800 font-mono break-all",children:s.entrypoint})})})]}),s.pool_yaml&&s.pool_yaml.trim()&&(0,r.jsxs)("div",{className:"pt-4 mt-4",children:[(0,r.jsxs)("div",{className:"flex items-center mb-2",children:[(0,r.jsxs)("button",{onClick:()=>{W(!F)},className:"flex items-center text-left focus:outline-none text-gray-700 hover:text-gray-900 transition-colors duration-200",children:[F?(0,r.jsx)(m.Z,{className:"w-4 h-4 mr-1"}):(0,r.jsx)(f.Z,{className:"w-4 h-4 mr-1"}),(0,r.jsx)("span",{className:"text-base",children:"Show Pool YAML"})]}),(0,r.jsx)(N.WH,{content:U?"Copied!":"Copy YAML",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:q,className:"flex items-center text-gray-500 hover:text-gray-700 transition-colors duration-200 p-1 ml-2",children:U?(0,r.jsx)(h.Z,{className:"w-4 h-4 text-green-600"}):(0,r.jsx)(x.Z,{className:"w-4 h-4"})})})]}),F&&(0,r.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-md p-3 max-h-96 overflow-y-auto",children:(0,r.jsx)(v.C,{className:"whitespace-pre-wrap",children:(0,y._q)(s.pool_yaml)})})]})]})]})}),(0,r.jsxs)("div",{className:"mb-8",children:[(0,r.jsxs)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between p-4",children:[(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Pool Workers"}),(0,r.jsx)("div",{className:"flex items-center space-x-2",children:(0,r.jsxs)("label",{className:"flex items-center space-x-3 text-sm cursor-pointer",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("input",{type:"checkbox",checked:D,onChange:e=>O(e.target.checked),className:"sr-only"}),(0,r.jsx)("div",{className:"w-11 h-6 rounded-full transition-colors duration-200 ease-in-out ".concat(D?"bg-blue-600":"bg-gray-300"),children:(0,r.jsx)("div",{className:"w-5 h-5 bg-white rounded-full shadow transform transition-transform duration-200 ease-in-out translate-y-0.5 ".concat(D?"translate-x-5":"translate-x-0.5")})})]}),(0,r.jsx)("span",{className:"text-gray-700",children:"Show history"})]})})]}),(0,r.jsxs)(w.iA,{children:[(0,r.jsx)(w.xD,{children:(0,r.jsxs)(w.SC,{children:[(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("replica_id"),children:["ID",B("replica_id")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("launched_at"),children:["Launched",B("launched_at")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("cloud"),children:["Infra",B("cloud")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("resources_str"),children:["Resources",B("resources_str")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("status"),children:["Status",B("status")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("used_by"),children:["Used By",B("used_by")]})]})}),(0,r.jsx)(w.RM,{children:X.length>0?X.map((e,t)=>(0,r.jsxs)(w.SC,{children:[(0,r.jsx)(w.pj,{children:e.replica_id}),(0,r.jsx)(w.pj,{children:e.launched_at&&e.launched_at>0?(0,r.jsx)(N.Zg,{date:new Date(1e3*e.launched_at)}):"-"}),(0,r.jsx)(w.pj,{children:(()=>{try{let t=e.cloud&&""!==e.cloud.trim()&&"undefined"!==e.cloud,s=e.region&&"undefined"!==e.region&&null!==e.region&&""!==e.region.trim();if(!t&&!s)return"-";let n=t?e.cloud:"Unknown",a=s?e.region:null;if(!a)return(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n});let l="".concat(n," (").concat(a,")"),c=j.MO.NAME_TRUNCATE_LENGTH,i=l.indexOf("(");if(-1===i)return(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n});if(a.length<=c)return(0,r.jsxs)("span",{children:[(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n}),(0,r.jsxs)("span",{children:[" (",a,")"]})]});let d="".concat(a.substring(0,Math.floor((c-3)/2)),"...").concat(a.substring(a.length-Math.ceil((c-3)/2)));return(0,r.jsx)(N.Md,{content:l,className:"text-sm text-muted-foreground",children:(0,r.jsxs)("span",{children:[(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n}),(0,r.jsxs)("span",{children:[" (",d,")"]})]})})}catch(e){return"-"}})()}),(0,r.jsx)(w.pj,{children:(()=>{try{return e.resources_str}catch(e){return"Error: ".concat(e.message)}})()}),(0,r.jsx)(w.pj,{children:(0,r.jsx)(b.OE,{status:e.status})}),(0,r.jsx)(w.pj,{children:e.used_by?(0,r.jsxs)(o(),{href:"/jobs/".concat(e.used_by),className:"text-blue-600 hover:text-blue-800 hover:underline",children:["Job ID: ",e.used_by]}):"-"})]},e.replica_id)):(0,r.jsx)(w.SC,{children:(0,r.jsx)(w.pj,{colSpan:6,className:"text-center py-8 text-gray-500",children:D?"No workers found in this pool":"No non-failed workers found in this pool"})})})]})]}),V.length>0&&(0,r.jsx)("div",{className:"flex justify-end items-center py-2 px-4 text-sm text-gray-700",children:(0,r.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("span",{className:"mr-2",children:"Rows per page:"}),(0,r.jsxs)("div",{className:"relative inline-block",children:[(0,r.jsxs)("select",{value:S,onChange:e=>{T(parseInt(e.target.value,10)),A(1)},className:"py-1 pl-2 pr-6 appearance-none outline-none cursor-pointer border-none bg-transparent",style:{minWidth:"40px"},children:[(0,r.jsx)("option",{value:5,children:"5"}),(0,r.jsx)("option",{value:10,children:"10"}),(0,r.jsx)("option",{value:20,children:"20"}),(0,r.jsx)("option",{value:50,children:"50"})]}),(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4 text-gray-500 absolute right-0 top-1/2 transform -translate-y-1/2 pointer-events-none",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})]}),(0,r.jsxs)("div",{children:[(R-1)*S+1," –"," ",Math.min(R*S,V.length)," ","of ",V.length]}),(0,r.jsx)(E.z,{variant:"ghost",size:"icon",onClick:()=>{A(e=>Math.max(e-1,1))},disabled:1===R,className:"text-gray-500 h-8 w-8 p-0",children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-left",children:(0,r.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,r.jsx)(E.z,{variant:"ghost",size:"icon",onClick:()=>{A(e=>Math.min(e+1,J))},disabled:R===J,className:"text-gray-500 h-8 w-8 p-0",children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-right",children:(0,r.jsx)("path",{d:"M9 18l6-6-6-6"})})})]})})]})]})]})]})}},12003:function(e,t,s){"use strict";s.d(t,{j:function(){return l}});var r=s(90512);let n=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,a=r.W,l=(e,t)=>s=>{var r;if((null==t?void 0:t.variants)==null)return a(e,null==s?void 0:s.class,null==s?void 0:s.className);let{variants:l,defaultVariants:c}=t,i=Object.keys(l).map(e=>{let t=null==s?void 0:s[e],r=null==c?void 0:c[e];if(null===t)return null;let a=n(t)||n(r);return l[e][a]}),o=s&&Object.entries(s).reduce((e,t)=>{let[s,r]=t;return void 0===r||(e[s]=r),e},{});return a(e,i,null==t?void 0:null===(r=t.compoundVariants)||void 0===r?void 0:r.reduce((e,t)=>{let{class:s,className:r,...n}=t;return Object.entries(n).every(e=>{let[t,s]=e;return Array.isArray(s)?s.includes({...c,...o}[t]):({...c,...o})[t]===s})?[...e,s,r]:e},[]),null==s?void 0:s.class,null==s?void 0:s.className)}}},function(e){e.O(0,[616,6130,5739,1272,754,6989,3850,8969,2888,9774,179],function(){return e(e.s=38808)}),_N_E=e.O()}]);
|
|
16
|
+
*/let u=(0,s(60998).Z)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);var h=s(70282),x=s(27325),m=s(45895),f=s(6639),p=s(68969),g=s(6378),N=s(36989),j=s(51214),b=s(99307),y=s(84303),v=s(1125),w=s(68764),E=s(30803);function _(){let e=(0,a.useRouter)(),{pool:t}=e.query,[s,l]=(0,n.useState)(null),[i,_]=(0,n.useState)(!1),[L,k]=(0,n.useState)(!0),[I,C]=(0,n.useState)(null),[R,A]=(0,n.useState)(1),[S,T]=(0,n.useState)(10),[D,O]=(0,n.useState)(!1),[P,M]=(0,n.useState)({key:null,direction:"ascending"}),[F,W]=(0,n.useState)(!1),[U,Y]=(0,n.useState)(!1),[Z,G]=(0,n.useState)(!1),H=n.useCallback(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(t){e?_(!0):k(!0),C(null);try{let{pools:e=[]}=await g.default.get(p.vs,[{}])||{},s=e.find(e=>e.name===t);s?l(s):(C("Pool ".concat(t," not found")),l(null))}catch(e){console.error("Error fetching pool data:",e),C("Failed to fetch pool data: ".concat(e.message)),l(null)}finally{e?_(!1):k(!1)}}},[t,_,k,C,l]);(0,n.useEffect)(()=>{H()},[t,H]);let z=e=>{let t="ascending";P.key===e&&"ascending"===P.direction&&(t="descending"),M({key:e,direction:t})},B=e=>P.key===e?"ascending"===P.direction?" ↑":" ↓":"",q=async()=>{try{if(s&&s.pool_yaml){let e=(0,y._q)(s.pool_yaml);await navigator.clipboard.writeText(e),Y(!0),setTimeout(()=>Y(!1),2e3)}}catch(e){console.error("Failed to copy Pool YAML to clipboard:",e)}},K=async()=>{try{s&&s.entrypoint&&(await navigator.clipboard.writeText(s.entrypoint),G(!0),setTimeout(()=>G(!1),2e3))}catch(e){console.error("Failed to copy entrypoint to clipboard:",e)}},{filteredWorkers:V,totalPages:J,paginatedWorkers:X}=(0,n.useMemo)(()=>{if(!s||!s.replica_info)return{filteredWorkers:[],totalPages:0,paginatedWorkers:[]};let e=D?s.replica_info:s.replica_info.filter(e=>!e.status||!e.status.includes("FAILED"));P.key&&(e=[...e].sort((e,t)=>{let s=e[P.key],r=t[P.key];return("launched_at"===P.key&&(s=s||0,r=r||0),"string"==typeof s&&(s=s.toLowerCase()),"string"==typeof r&&(r=r.toLowerCase()),s<r)?"ascending"===P.direction?-1:1:s>r?"ascending"===P.direction?1:-1:0}));let t=Math.ceil(e.length/S),r=(R-1)*S,n=r+S,a=e.slice(r,n);return{filteredWorkers:e,totalPages:t,paginatedWorkers:a}},[s,D,R,S,P]);return((0,n.useEffect)(()=>{A(1)},[D,P]),!e.isReady||L)?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c(),{children:(0,r.jsxs)("title",{children:["Pool ",t," | SkyPilot Dashboard"]})}),(0,r.jsx)("div",{className:"min-h-screen flex items-center justify-center",children:(0,r.jsxs)("div",{className:"flex flex-col items-center",children:[(0,r.jsx)(d.Z,{size:32,className:"mb-3"}),(0,r.jsx)("span",{className:"text-gray-600",children:"Loading pool details..."})]})})]}):I||!s?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c(),{children:(0,r.jsxs)("title",{children:["Pool ",t," | SkyPilot Dashboard"]})}),(0,r.jsx)("div",{className:"bg-white shadow rounded-lg p-6",children:(0,r.jsxs)("div",{className:"text-center text-red-600",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold mb-2",children:"Error"}),(0,r.jsx)("p",{children:I||"Pool ".concat(t," not found")}),(0,r.jsx)("button",{onClick:()=>{g.default.invalidate(p.vs,[{}]),H(!0)},className:"mt-4 bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600",children:"Retry"})]})})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c(),{children:(0,r.jsxs)("title",{children:["Pool ",t," | SkyPilot Dashboard"]})}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,r.jsxs)("div",{className:"text-base flex items-center",children:[(0,r.jsx)(o(),{href:"/jobs",className:"text-sky-blue hover:underline",children:"Pools"}),(0,r.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,r.jsx)(o(),{href:"/jobs/pools/".concat(t),className:"text-sky-blue hover:underline",children:t})]}),(0,r.jsxs)("div",{className:"text-sm flex items-center",children:[i&&(0,r.jsxs)("div",{className:"flex items-center mr-4",children:[(0,r.jsx)(d.Z,{size:15,className:"mt-0"}),(0,r.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),(0,r.jsxs)("button",{onClick:()=>{g.default.invalidate(p.vs,[{}]),H(!0)},disabled:i,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,r.jsx)(u,{className:"w-4 h-4 mr-1.5 ".concat(i?"animate-spin":"")}),(0,r.jsx)("span",{children:"Refresh"})]})]})]}),(0,r.jsxs)("div",{className:"w-full flex flex-col space-y-6",children:[(0,r.jsx)("div",{className:"mb-6",children:(0,r.jsxs)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:[(0,r.jsx)("div",{className:"flex items-center justify-between px-4 pt-4",children:(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Details"})}),(0,r.jsxs)("div",{className:"p-4",children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Jobs"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(N.x9,{jobCounts:(0,N.sY)(s),getStatusStyle:b.Cl})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Workers"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(e=>{if(!e||!e.replica_info||0===e.replica_info.length)return"0 (target: 0)";let t=e.replica_info.filter(e=>"READY"===e.status).length,s=e.target_num_replicas||0;return"".concat(t," (target: ").concat(s,")")})(s)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Worker Details"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(N.Kl,{replicaInfo:s.replica_info})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Worker Resources"}),(0,r.jsx)("div",{className:"text-base mt-1",children:s.requested_resources_str||"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Policy"}),(0,r.jsx)("div",{className:"text-base mt-1",children:s.policy||"-"})]})]}),s.entrypoint&&(0,r.jsxs)("div",{className:"pt-4 mt-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Entrypoint"}),(0,r.jsx)(N.WH,{content:Z?"Copied!":"Copy command",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:K,className:"flex items-center text-gray-500 hover:text-gray-700 transition-colors duration-200 p-1 ml-2",children:Z?(0,r.jsx)(h.Z,{className:"w-4 h-4 text-green-600"}):(0,r.jsx)(x.Z,{className:"w-4 h-4"})})})]}),(0,r.jsx)("div",{className:"mt-3",children:(0,r.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-md p-3",children:(0,r.jsx)("code",{className:"text-sm text-gray-800 font-mono break-all",children:s.entrypoint})})})]}),s.pool_yaml&&s.pool_yaml.trim()&&(0,r.jsxs)("div",{className:"pt-4 mt-4",children:[(0,r.jsxs)("div",{className:"flex items-center mb-2",children:[(0,r.jsxs)("button",{onClick:()=>{W(!F)},className:"flex items-center text-left focus:outline-none text-gray-700 hover:text-gray-900 transition-colors duration-200",children:[F?(0,r.jsx)(m.Z,{className:"w-4 h-4 mr-1"}):(0,r.jsx)(f.Z,{className:"w-4 h-4 mr-1"}),(0,r.jsx)("span",{className:"text-base",children:"Show Pool YAML"})]}),(0,r.jsx)(N.WH,{content:U?"Copied!":"Copy YAML",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:q,className:"flex items-center text-gray-500 hover:text-gray-700 transition-colors duration-200 p-1 ml-2",children:U?(0,r.jsx)(h.Z,{className:"w-4 h-4 text-green-600"}):(0,r.jsx)(x.Z,{className:"w-4 h-4"})})})]}),F&&(0,r.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-md p-3 max-h-96 overflow-y-auto",children:(0,r.jsx)(v.C,{className:"whitespace-pre-wrap",children:(0,y._q)(s.pool_yaml)})})]})]})]})}),(0,r.jsxs)("div",{className:"mb-8",children:[(0,r.jsxs)("div",{className:"rounded-lg border bg-card text-card-foreground shadow-sm",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between p-4",children:[(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Pool Workers"}),(0,r.jsx)("div",{className:"flex items-center space-x-2",children:(0,r.jsxs)("label",{className:"flex items-center space-x-3 text-sm cursor-pointer",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)("input",{type:"checkbox",checked:D,onChange:e=>O(e.target.checked),className:"sr-only"}),(0,r.jsx)("div",{className:"w-11 h-6 rounded-full transition-colors duration-200 ease-in-out ".concat(D?"bg-blue-600":"bg-gray-300"),children:(0,r.jsx)("div",{className:"w-5 h-5 bg-white rounded-full shadow transform transition-transform duration-200 ease-in-out translate-y-0.5 ".concat(D?"translate-x-5":"translate-x-0.5")})})]}),(0,r.jsx)("span",{className:"text-gray-700",children:"Show history"})]})})]}),(0,r.jsxs)(w.iA,{children:[(0,r.jsx)(w.xD,{children:(0,r.jsxs)(w.SC,{children:[(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("replica_id"),children:["ID",B("replica_id")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("launched_at"),children:["Launched",B("launched_at")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("cloud"),children:["Infra",B("cloud")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("resources_str"),children:["Resources",B("resources_str")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("status"),children:["Status",B("status")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("version"),children:["Pool Version",B("version")]}),(0,r.jsxs)(w.ss,{className:"sortable whitespace-nowrap",onClick:()=>z("used_by"),children:["Used By",B("used_by")]})]})}),(0,r.jsx)(w.RM,{children:X.length>0?X.map((e,t)=>(0,r.jsxs)(w.SC,{children:[(0,r.jsx)(w.pj,{children:e.replica_id}),(0,r.jsx)(w.pj,{children:e.launched_at&&e.launched_at>0?(0,r.jsx)(N.Zg,{date:new Date(1e3*e.launched_at)}):"-"}),(0,r.jsx)(w.pj,{children:(()=>{try{let t=e.cloud&&""!==e.cloud.trim()&&"undefined"!==e.cloud,s=e.region&&"undefined"!==e.region&&null!==e.region&&""!==e.region.trim();if(!t&&!s)return"-";let n=t?e.cloud:"Unknown",a=s?e.region:null;if(!a)return(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n});let l="".concat(n," (").concat(a,")"),c=j.MO.NAME_TRUNCATE_LENGTH,i=l.indexOf("(");if(-1===i)return(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n});if(a.length<=c)return(0,r.jsxs)("span",{children:[(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n}),(0,r.jsxs)("span",{children:[" (",a,")"]})]});let d="".concat(a.substring(0,Math.floor((c-3)/2)),"...").concat(a.substring(a.length-Math.ceil((c-3)/2)));return(0,r.jsx)(N.Md,{content:l,className:"text-sm text-muted-foreground",children:(0,r.jsxs)("span",{children:[(0,r.jsx)(o(),{href:"/infra",className:"text-blue-600 hover:underline",children:n}),(0,r.jsxs)("span",{children:[" (",d,")"]})]})})}catch(e){return"-"}})()}),(0,r.jsx)(w.pj,{children:(()=>{try{return e.resources_str}catch(e){return"Error: ".concat(e.message)}})()}),(0,r.jsx)(w.pj,{children:(0,r.jsx)(b.OE,{status:e.status})}),(0,r.jsx)(w.pj,{children:e.version||"-"}),(0,r.jsx)(w.pj,{children:e.used_by?(0,r.jsxs)(o(),{href:"/jobs/".concat(e.used_by),className:"text-blue-600 hover:text-blue-800 hover:underline",children:["Job ID: ",e.used_by]}):"-"})]},e.replica_id)):(0,r.jsx)(w.SC,{children:(0,r.jsx)(w.pj,{colSpan:7,className:"text-center py-8 text-gray-500",children:D?"No workers found in this pool":"No non-failed workers found in this pool"})})})]})]}),V.length>0&&(0,r.jsx)("div",{className:"flex justify-end items-center py-2 px-4 text-sm text-gray-700",children:(0,r.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("span",{className:"mr-2",children:"Rows per page:"}),(0,r.jsxs)("div",{className:"relative inline-block",children:[(0,r.jsxs)("select",{value:S,onChange:e=>{T(parseInt(e.target.value,10)),A(1)},className:"py-1 pl-2 pr-6 appearance-none outline-none cursor-pointer border-none bg-transparent",style:{minWidth:"40px"},children:[(0,r.jsx)("option",{value:5,children:"5"}),(0,r.jsx)("option",{value:10,children:"10"}),(0,r.jsx)("option",{value:20,children:"20"}),(0,r.jsx)("option",{value:50,children:"50"})]}),(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4 text-gray-500 absolute right-0 top-1/2 transform -translate-y-1/2 pointer-events-none",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})]}),(0,r.jsxs)("div",{children:[(R-1)*S+1," –"," ",Math.min(R*S,V.length)," ","of ",V.length]}),(0,r.jsx)(E.z,{variant:"ghost",size:"icon",onClick:()=>{A(e=>Math.max(e-1,1))},disabled:1===R,className:"text-gray-500 h-8 w-8 p-0",children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-left",children:(0,r.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,r.jsx)(E.z,{variant:"ghost",size:"icon",onClick:()=>{A(e=>Math.min(e+1,J))},disabled:R===J,className:"text-gray-500 h-8 w-8 p-0",children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-right",children:(0,r.jsx)("path",{d:"M9 18l6-6-6-6"})})})]})})]})]})]})]})}},12003:function(e,t,s){"use strict";s.d(t,{j:function(){return l}});var r=s(90512);let n=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,a=r.W,l=(e,t)=>s=>{var r;if((null==t?void 0:t.variants)==null)return a(e,null==s?void 0:s.class,null==s?void 0:s.className);let{variants:l,defaultVariants:c}=t,i=Object.keys(l).map(e=>{let t=null==s?void 0:s[e],r=null==c?void 0:c[e];if(null===t)return null;let a=n(t)||n(r);return l[e][a]}),o=s&&Object.entries(s).reduce((e,t)=>{let[s,r]=t;return void 0===r||(e[s]=r),e},{});return a(e,i,null==t?void 0:null===(r=t.compoundVariants)||void 0===r?void 0:r.reduce((e,t)=>{let{class:s,className:r,...n}=t;return Object.entries(n).every(e=>{let[t,s]=e;return Array.isArray(s)?s.includes({...c,...o}[t]):({...c,...o})[t]===s})?[...e,s,r]:e},[]),null==s?void 0:s.class,null==s?void 0:s.className)}}},function(e){e.O(0,[616,6130,5739,1272,754,6989,3850,8969,2888,9774,179],function(){return e(e.s=38808)}),_N_E=e.O()}]);
|
sky/dashboard/out/_next/static/chunks/{webpack-7340bc0f0dd8ae74.js → webpack-4f0c389a4ce5fd9c.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";var e,t,n,r,c,o,u,a,i,f={},d={};function s(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}},r=!0;try{f[e](n,n.exports,s),r=!1}finally{r&&delete d[e]}return n.exports}s.m=f,e=[],s.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],a=!0,i=0;i<n.length;i++)u>=c&&Object.keys(s.O).every(function(e){return s.O[e](n[i])})?n.splice(i--,1):(a=!1,c<u&&(u=c));if(a){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},s.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);s.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},s.d(c,o),c},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce(function(t,n){return s.f[n](e,t),t},[]))},s.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":7325===e?"static/chunks/7325.b4bc99ce0892dcd5.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.c12318fb6a1a9093.js":3294===e?"static/chunks/3294.93d9336bdc032b3a.js":649===e?"static/chunks/649.b9d7f7d10c1b8c53.js":
|
|
1
|
+
!function(){"use strict";var e,t,n,r,c,o,u,a,i,f={},d={};function s(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}},r=!0;try{f[e](n,n.exports,s),r=!1}finally{r&&delete d[e]}return n.exports}s.m=f,e=[],s.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],a=!0,i=0;i<n.length;i++)u>=c&&Object.keys(s.O).every(function(e){return s.O[e](n[i])})?n.splice(i--,1):(a=!1,c<u&&(u=c));if(a){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},s.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);s.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},s.d(c,o),c},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce(function(t,n){return s.f[n](e,t),t},[]))},s.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":7325===e?"static/chunks/7325.b4bc99ce0892dcd5.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.c12318fb6a1a9093.js":3294===e?"static/chunks/3294.93d9336bdc032b3a.js":649===e?"static/chunks/649.b9d7f7d10c1b8c53.js":4045===e?"static/chunks/4045.b30465273dc5e468.js":4725===e?"static/chunks/4725.10f7a9a5d3ea8208.js":7669===e?"static/chunks/7669.1f5d9a402bf5cc42.js":3785===e?"static/chunks/3785.0fa442e16dd3f00e.js":5339===e?"static/chunks/5339.4a881570243431a5.js":"static/chunks/"+e+"-"+({616:"3d59f75e2ccf9321",1121:"d0782b9251f0fcd3",1141:"159df2d4c441a9d1",1272:"1ef0bf0237faccdb",1836:"37fede578e2da5f8",3015:"88c7c8d69b0b6dba",3850:"ff4a9a69d978632b",4676:"9da7fdbde90b5549",5739:"d67458fcb1386c92",6130:"2be46d70a38f1e82",6135:"4b4d5e824b7f9d3c",6601:"06114c982db410b6",6856:"5fdc9b851a18acdb",6989:"01359c57e018caa4",6990:"f6818c84ed8f1c86",7411:"b15471acd2cba716",8969:"d8bc3a2b9cf839a9",9037:"d0c00018a5ba198c"})[e]+".js"},s.miniCssF=function(e){},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",s.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var u,a,i=document.getElementsByTagName("script"),f=0;f<i.length;f++){var d=i[f];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==c+n){u=d;break}}u||(a=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,s.nc&&u.setAttribute("nonce",s.nc),u.setAttribute("data-webpack",c+n),u.src=s.tu(e)),r[e]=[t];var b=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),a&&document.head.appendChild(u)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},s.tu=function(e){return s.tt().createScriptURL(e)},s.p="/dashboard/_next/",u={2272:0},s.f.j=function(e,t){var n=s.o(u,e)?u[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var c=s.p+s.u(e),o=Error();s.l(c,function(t){if(s.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else u[e]=0}},s.O.j=function(e){return 0===u[e]},a=function(e,t){var n,r,c=t[0],o=t[1],a=t[2],i=0;if(c.some(function(e){return 0!==u[e]})){for(n in o)s.o(o,n)&&(s.m[n]=o[n]);if(a)var f=a(s)}for(e&&e(t);i<c.length;i++)r=c[i],s.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return s.O(f)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(a.bind(null,0)),i.push=a.bind(null,i.push.bind(i)),s.nc=void 0}();
|
sky/dashboard/out/_next/static/{UDSEoDB67vwFMZyCJ4HWU → m3YT2i5s6v4SsIdYc8WZa}/_buildManifest.js
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__BUILD_MANIFEST=function(s,c,a,t,e,f,u,n,
|
|
1
|
+
self.__BUILD_MANIFEST=function(s,c,a,t,e,f,b,u,n,o,j,i,r,k){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/pages/index-444f1804401f04ea.js"],"/_error":["static/chunks/pages/_error-c66a4e8afc46f17b.js"],"/clusters":["static/chunks/pages/clusters-469814d711d63b1b.js"],"/clusters/[cluster]":[s,c,a,f,b,"static/chunks/4676-9da7fdbde90b5549.js",o,t,e,u,j,n,i,"static/chunks/6856-5fdc9b851a18acdb.js",r,k,"static/chunks/9037-d0c00018a5ba198c.js","static/chunks/pages/clusters/[cluster]-e052384df65ef200.js"],"/clusters/[cluster]/[job]":[s,c,a,f,t,e,n,"static/chunks/pages/clusters/[cluster]/[job]-ad77b12fc736dca3.js"],"/config":["static/chunks/pages/config-dfb9bf07b13045f4.js"],"/infra":["static/chunks/pages/infra-aabba60d57826e0f.js"],"/infra/[context]":["static/chunks/pages/infra/[context]-6563820e094f68ca.js"],"/jobs":["static/chunks/pages/jobs-1f70d9faa564804f.js"],"/jobs/pools/[pool]":[s,c,a,b,o,t,e,u,"static/chunks/pages/jobs/pools/[pool]-509b2977a6373bf6.js"],"/jobs/[job]":[s,c,a,f,b,o,t,e,u,n,"static/chunks/pages/jobs/[job]-dd64309c3fe67ed2.js"],"/users":["static/chunks/pages/users-018bf31cda52e11b.js"],"/volumes":["static/chunks/pages/volumes-739726d6b823f532.js"],"/workspace/new":["static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js"],"/workspaces":["static/chunks/pages/workspaces-7528cc0ef8c522c5.js"],"/workspaces/[name]":[s,c,a,f,b,"static/chunks/1836-37fede578e2da5f8.js",t,e,u,j,n,i,r,k,"static/chunks/1141-159df2d4c441a9d1.js","static/chunks/pages/workspaces/[name]-af76bb06dbb3954f.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/config","/infra","/infra/[context]","/jobs","/jobs/pools/[pool]","/jobs/[job]","/users","/volumes","/workspace/new","/workspaces","/workspaces/[name]"]}}("static/chunks/616-3d59f75e2ccf9321.js","static/chunks/6130-2be46d70a38f1e82.js","static/chunks/5739-d67458fcb1386c92.js","static/chunks/6989-01359c57e018caa4.js","static/chunks/3850-ff4a9a69d978632b.js","static/chunks/7411-b15471acd2cba716.js","static/chunks/1272-1ef0bf0237faccdb.js","static/chunks/8969-d8bc3a2b9cf839a9.js","static/chunks/6135-4b4d5e824b7f9d3c.js","static/chunks/754-d0da8ab45f9509e9.js","static/chunks/6990-f6818c84ed8f1c86.js","static/chunks/1121-d0782b9251f0fcd3.js","static/chunks/6601-06114c982db410b6.js","static/chunks/3015-88c7c8d69b0b6dba.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|