rails-profiler 0.10.1 → 0.11.0
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5f02d90b7d6f03504d5aa8412b3f4a3c1fc3064152057489514981daeba18307
|
|
4
|
+
data.tar.gz: bbf33083a998d3e9ac918ba7600522799bea7006c54fe66f020ea98465e7b086
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4b92adb363521979754c08a7304e0559d8221c5541c706d45d2aea01cb9a52bc7893b00847fe741e854551b74fbf6ea02ff9a641893fa5005f7c93953715059b
|
|
7
|
+
data.tar.gz: b5a00222dee6d68456211b346210573c1781cb42cc6c196a0ade5b0c05e2fc04c86abc4f58a2dd2ee42bf21be7f99ed1a0ef5c2e320bf82642dfa0f563a09bd5
|
|
@@ -740,7 +740,13 @@
|
|
|
740
740
|
};
|
|
741
741
|
const [section, setSection] = d2(initialSection);
|
|
742
742
|
const [profiles, setProfiles] = d2([]);
|
|
743
|
+
const [httpOffset, setHttpOffset] = d2(0);
|
|
744
|
+
const [httpHasMore, setHttpHasMore] = d2(false);
|
|
745
|
+
const [httpLoadingMore, setHttpLoadingMore] = d2(false);
|
|
743
746
|
const [jobs, setJobs] = d2([]);
|
|
747
|
+
const [jobOffset, setJobOffset] = d2(0);
|
|
748
|
+
const [jobHasMore, setJobHasMore] = d2(false);
|
|
749
|
+
const [jobLoadingMore, setJobLoadingMore] = d2(false);
|
|
744
750
|
const [outboundRequests, setOutboundRequests] = d2([]);
|
|
745
751
|
const [loadingHttp, setLoadingHttp] = d2(true);
|
|
746
752
|
const [loadingJobs, setLoadingJobs] = d2(false);
|
|
@@ -767,8 +773,10 @@
|
|
|
767
773
|
const [outboundMethod, setOutboundMethod] = d2("");
|
|
768
774
|
const [outboundStatus, setOutboundStatus] = d2("");
|
|
769
775
|
y2(() => {
|
|
770
|
-
fetch(`${BASE}/api/profiles`).then((res) => res.json()).then((data) => {
|
|
771
|
-
setProfiles(data.
|
|
776
|
+
fetch(`${BASE}/api/profiles?limit=50&offset=0`).then((res) => res.json()).then((data) => {
|
|
777
|
+
setProfiles(data.profiles);
|
|
778
|
+
setHttpOffset(data.profiles.length);
|
|
779
|
+
setHttpHasMore(data.has_more);
|
|
772
780
|
setLoadingHttp(false);
|
|
773
781
|
}).catch(() => {
|
|
774
782
|
setError("Failed to load profiles");
|
|
@@ -803,11 +811,22 @@
|
|
|
803
811
|
const togglePreset = (key) => {
|
|
804
812
|
setHttpPreset((prev) => prev === key ? "" : key);
|
|
805
813
|
};
|
|
814
|
+
const loadMoreHttp = () => {
|
|
815
|
+
setHttpLoadingMore(true);
|
|
816
|
+
fetch(`${BASE}/api/profiles?limit=50&offset=${httpOffset}`).then((res) => res.json()).then((data) => {
|
|
817
|
+
setProfiles((prev) => [...prev, ...data.profiles]);
|
|
818
|
+
setHttpOffset((prev) => prev + data.profiles.length);
|
|
819
|
+
setHttpHasMore(data.has_more);
|
|
820
|
+
setHttpLoadingMore(false);
|
|
821
|
+
}).catch(() => setHttpLoadingMore(false));
|
|
822
|
+
};
|
|
806
823
|
const loadJobs = () => {
|
|
807
824
|
if (jobsLoaded) return;
|
|
808
825
|
setLoadingJobs(true);
|
|
809
|
-
fetch(`${BASE}/api/jobs`).then((res) => res.json()).then((data) => {
|
|
810
|
-
setJobs(data);
|
|
826
|
+
fetch(`${BASE}/api/jobs?limit=50&offset=0`).then((res) => res.json()).then((data) => {
|
|
827
|
+
setJobs(data.profiles);
|
|
828
|
+
setJobOffset(data.profiles.length);
|
|
829
|
+
setJobHasMore(data.has_more);
|
|
811
830
|
setLoadingJobs(false);
|
|
812
831
|
setJobsLoaded(true);
|
|
813
832
|
}).catch(() => {
|
|
@@ -816,6 +835,15 @@
|
|
|
816
835
|
setJobsLoaded(true);
|
|
817
836
|
});
|
|
818
837
|
};
|
|
838
|
+
const loadMoreJobs = () => {
|
|
839
|
+
setJobLoadingMore(true);
|
|
840
|
+
fetch(`${BASE}/api/jobs?limit=50&offset=${jobOffset}`).then((res) => res.json()).then((data) => {
|
|
841
|
+
setJobs((prev) => [...prev, ...data.profiles]);
|
|
842
|
+
setJobOffset((prev) => prev + data.profiles.length);
|
|
843
|
+
setJobHasMore(data.has_more);
|
|
844
|
+
setJobLoadingMore(false);
|
|
845
|
+
}).catch(() => setJobLoadingMore(false));
|
|
846
|
+
};
|
|
819
847
|
const loadOutbound = () => {
|
|
820
848
|
if (outboundLoaded) return;
|
|
821
849
|
setLoadingOutbound(true);
|
|
@@ -878,8 +906,10 @@
|
|
|
878
906
|
const refresh = () => {
|
|
879
907
|
if (section === "http") {
|
|
880
908
|
setLoadingHttp(true);
|
|
881
|
-
fetch(`${BASE}/api/profiles`).then((res) => res.json()).then((data) => {
|
|
882
|
-
setProfiles(data.
|
|
909
|
+
fetch(`${BASE}/api/profiles?limit=50&offset=0`).then((res) => res.json()).then((data) => {
|
|
910
|
+
setProfiles(data.profiles);
|
|
911
|
+
setHttpOffset(data.profiles.length);
|
|
912
|
+
setHttpHasMore(data.has_more);
|
|
883
913
|
setLoadingHttp(false);
|
|
884
914
|
}).catch(() => {
|
|
885
915
|
setError("Failed to load profiles");
|
|
@@ -887,8 +917,10 @@
|
|
|
887
917
|
});
|
|
888
918
|
} else if (section === "jobs") {
|
|
889
919
|
setLoadingJobs(true);
|
|
890
|
-
fetch(`${BASE}/api/jobs`).then((res) => res.json()).then((data) => {
|
|
891
|
-
setJobs(data);
|
|
920
|
+
fetch(`${BASE}/api/jobs?limit=50&offset=0`).then((res) => res.json()).then((data) => {
|
|
921
|
+
setJobs(data.profiles);
|
|
922
|
+
setJobOffset(data.profiles.length);
|
|
923
|
+
setJobHasMore(data.has_more);
|
|
892
924
|
setLoadingJobs(false);
|
|
893
925
|
}).catch(() => {
|
|
894
926
|
setJobsError("Failed to load job profiles");
|
|
@@ -1094,7 +1126,8 @@
|
|
|
1094
1126
|
/* @__PURE__ */ u3("td", { class: "profiler-text--xs profiler-text--mono profiler-text--muted", children: /* @__PURE__ */ u3("button", { class: "token-copy", onClick: () => copyToken(p3.token), title: "Copy full token", children: copiedToken === p3.token ? "\u2713" : p3.token.substring(0, 8) + "\u2026" }) }),
|
|
1095
1127
|
/* @__PURE__ */ u3("td", { children: /* @__PURE__ */ u3("button", { class: "btn-row-delete", onClick: () => deleteProfile(p3.token), title: "Delete", children: "\xD7" }) })
|
|
1096
1128
|
] }, p3.token)) })
|
|
1097
|
-
] })
|
|
1129
|
+
] }),
|
|
1130
|
+
httpHasMore && !httpFiltersActive && /* @__PURE__ */ u3("div", { class: "profiler-load-more", children: /* @__PURE__ */ u3("button", { class: "btn btn-secondary", onClick: loadMoreHttp, disabled: httpLoadingMore, children: httpLoadingMore ? "Loading\u2026" : "Load more" }) })
|
|
1098
1131
|
] })),
|
|
1099
1132
|
section === "jobs" && (loadingJobs ? /* @__PURE__ */ u3("div", { class: "profiler-empty", children: /* @__PURE__ */ u3("div", { class: "profiler-empty__title", children: "Loading..." }) }) : jobsError ? /* @__PURE__ */ u3("div", { class: "profiler-empty", children: /* @__PURE__ */ u3("div", { class: "profiler-empty__title", children: jobsError }) }) : jobs.length === 0 ? /* @__PURE__ */ u3("div", { class: "profiler-empty", children: [
|
|
1100
1133
|
/* @__PURE__ */ u3("div", { class: "profiler-empty__title", children: "No job profiles found" }),
|
|
@@ -1162,7 +1195,8 @@
|
|
|
1162
1195
|
/* @__PURE__ */ u3("td", { children: /* @__PURE__ */ u3("button", { class: "btn-row-delete", onClick: () => deleteJob(p3.token), title: "Delete", children: "\xD7" }) })
|
|
1163
1196
|
] }, p3.token);
|
|
1164
1197
|
}) })
|
|
1165
|
-
] })
|
|
1198
|
+
] }),
|
|
1199
|
+
jobHasMore && !jobFiltersActive && /* @__PURE__ */ u3("div", { class: "profiler-load-more", children: /* @__PURE__ */ u3("button", { class: "btn btn-secondary", onClick: loadMoreJobs, disabled: jobLoadingMore, children: jobLoadingMore ? "Loading\u2026" : "Load more" }) })
|
|
1166
1200
|
] })),
|
|
1167
1201
|
section === "outbound" && (loadingOutbound ? /* @__PURE__ */ u3("div", { class: "profiler-empty", children: /* @__PURE__ */ u3("div", { class: "profiler-empty__title", children: "Loading..." }) }) : outboundError ? /* @__PURE__ */ u3("div", { class: "profiler-empty", children: /* @__PURE__ */ u3("div", { class: "profiler-empty__title", children: outboundError }) }) : outboundRequests.length === 0 ? /* @__PURE__ */ u3("div", { class: "profiler-empty", children: [
|
|
1168
1202
|
/* @__PURE__ */ u3("div", { class: "profiler-empty__title", children: "No outbound HTTP requests found" }),
|
|
@@ -6,10 +6,17 @@ module Profiler
|
|
|
6
6
|
skip_before_action :verify_authenticity_token
|
|
7
7
|
|
|
8
8
|
def index
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
limit = (params[:limit] || 50).to_i
|
|
10
|
+
offset = (params[:offset] || 0).to_i
|
|
11
|
+
all = Profiler.storage.list(limit: 1000, offset: 0)
|
|
12
|
+
jobs = all.select { |p| p.profile_type == "job" }
|
|
13
|
+
page = jobs.drop(offset).first(limit + 1)
|
|
14
|
+
render json: {
|
|
15
|
+
profiles: page.first(limit).map(&:to_h),
|
|
16
|
+
limit: limit,
|
|
17
|
+
offset: offset,
|
|
18
|
+
has_more: page.size > limit
|
|
19
|
+
}
|
|
13
20
|
end
|
|
14
21
|
|
|
15
22
|
def show
|
|
@@ -6,8 +6,17 @@ module Profiler
|
|
|
6
6
|
skip_before_action :verify_authenticity_token
|
|
7
7
|
|
|
8
8
|
def index
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
limit = (params[:limit] || 50).to_i
|
|
10
|
+
offset = (params[:offset] || 0).to_i
|
|
11
|
+
all = Profiler.storage.list(limit: 1000, offset: 0)
|
|
12
|
+
http = all.reject { |p| p.profile_type == "job" }
|
|
13
|
+
page = http.drop(offset).first(limit + 1)
|
|
14
|
+
render json: {
|
|
15
|
+
profiles: page.first(limit).map(&:to_h),
|
|
16
|
+
limit: limit,
|
|
17
|
+
offset: offset,
|
|
18
|
+
has_more: page.size > limit
|
|
19
|
+
}
|
|
11
20
|
end
|
|
12
21
|
|
|
13
22
|
def show
|
data/lib/profiler/version.rb
CHANGED