v2.0 with React-based frontend (#233)

* Correct path to static dir

* Add UI build to makefile

* Fix docker build

* describe now works

* Installed page - revision view - implement url consistent state logic (#403)

* refactor

* refactor

* Fix/responsive and small stylings (#404)

* add user defined (#405)

* Fix/modal loading button (#406)

* add repo to url (#407)

* Fix/resources table badges (#408)

* filters is now good

* fix

* test results fix

* fix

* fixes - error modal, uninstall modals, typees

* fixes

* bug fix

* Helm dashboard v2 (#402)

* missing config (#409)

* fixes

* fixes

* Fix/minor responsiveness (#410)

* installed release page

* default helm icon

* guard

* refactor

* refactor

* refactor

* key

* refactor

* fixes

* fixes to install

* install, add, upgrade, reconfigure now works

* latest ver fix

* Revision page ui fixes (#411)

* link color

* Add-repository-link (#412)

* empty badge fix

* diff fix in install repo

* removed console.log

* unique key in helathstatus

* Cosmetics

* Goreleaser upgraded

* Another way to fix it

* refactor

* refactor

* chart install fix (#413)

* more maintailable

* loading, empty space and default namespace

* typed

* loading diff state is shared

* modal height fix

* upgrade and add repo connected

* add repo suggestion data connected to modal

* removed console.log

* Chart install fix (#414)

* refactor: fix text align uninstall

* install modal values big fix

* refactor

* no changes in diff msg

* refactor

* sorted versions

* typography changes

* refactor

* refactor

* refactor

* migrate to sb 7 (#416)

* Chart install fix (#415)

* Add troubleshoot in komodor (#417)

* status style

* fix

* fixes

* delete now reload the page correclty

* navigate after add repo fix

* Chart install fix (#419)

* refactor

* refactor

* Fix revision age (#420)

* refactor

* fixed redirects and nav links selected ui (#421)

* test modal ui fixes

* arrows fix

* loading ui (#422)

* test dialog now shows errors

* fixed rollback diff, redirect after rollback, and debouncing before refetching chart values after changing user defined values (#423)

* everything is working besides install chart

* install chart should work now

* no need for this anymore

* styling and naming

* improvements

* navigation fix

* flow fixes

* top bar pixel perfect

* onClose is optional

* ts optional

* pixel perfect - clusters, box shadow, error modal

* installed page pixel perfect

* fixes

* need to fix this naming

* rollback logic is now good

* buttons now similiar to the old app

* pass release instead of release date (#426)

* repository page style fixes

* rounded input

* colors like in the old app

* more rounding

* colors

* colors

* Cosmetics

* drop-shadow cause the dropdown to swallowed

* smaller text

* fixes (#428)

* fixes

* describe fix

* Fix/lint (#431)

* style fixes

* fix

* describe panel style fixes

* diff when repo is available

* diff style fixes

* fixes to install dialog

* specific version should be latests revision

* refactor

* fixes

* fixes

* cause troubles

* Fixes (#434)

* fix

* dont fetch if repo not available

* tag should not be visible

* custom-shdaow fixes

* space and shadow like in the old app

* refactor (#435)

* describe display logic aligned with the old app

* style fix

* action button style fix

* selected revision default logic fix

* font fix

* style fixes

* shutdown button fix

* latest revision is now consistent in dev and prod

* namespace should be empty on install

* fix for current version on install

* sorting fix

* checkmark should be displayed in options - install

* state jump fix

* local charts (#436)

* Several more fixes (#438)

* api docs (#439)

* html remove diff2html dep (#437)

* Refactor

* refactor

* Adding storybook for StatusLabel component (#441)

* refactor (#442)

* we need the css

* add prettier (#440)

* add prettier

* refactor

* refactor

* Fix reconfigure issue (#443)

* first diff fetch fix

* missing dep in hooks (#444)

* namespace should be from query

* triggering diff rerender by listening to loading

* missing uservalues

* no need for auto retry

* we should work against latest revision

* refactor

* Fix build merge

* refactor

* refactor

* fix

* refactor

* refactor

* age tooltip

* prettier fix

* fix bug (#447)

* Add eslint now (#449)

* repo install chart now works as expected

* release modal and eslint working good now

* we should fetch when return to the initial value

* Tailwind theme reorganized (#446)

* install release code is like reading a story !

* namespace is not needed for chart values

* install repo chart is now like reading a story :)

* Fix/filternamesapce (#451)

* not needed dep

* prettier fix

* namespace fix

* add debounce (#452)

* namespace filter fix

* now namespace filter behaves like in the old app

* more linter rules and configurations

* intial value should be empty

* no need to keep filters on cluster change

* we don't want to keep tab state between pages

* button should be disabled when loading

* prettier fix

* initial value we're not presented

* navigation fix

* namespace should always be empty

* supporting pre selected namespaces

* lint adjustments

* Refactor stories fodler (#450)

* refactor

* refactor

* if no user values, use the release values

* Adding layer to base style (#456)

* Extract duplicate type to types file (#453)

* Refactor callApi into direct usage of apiService (#454)

* Remove scanners from backend

* Give some room for multiple HealthStatus (#458)

* refactor: add dynamic api docs (#460)

* remove scanners from openapi

* was loading forever

* fix

* Extract defined values from the Modals (#461)

* refactor (#462)

* fix chart with no repo diff flow

* naming fix

* crypto UUID not available through https

* revert

* Update analytics.js with UUID fallback

* Cosmetics

* repo fetch fix

* not need to depened on versions

* forgot to push

* revert

* was causing infinite loop

* COsmetics

---------

Co-authored-by: Nir Parisian <nir.parisian@gmail.com>
Co-authored-by: dav-sap <davidsaper@gmail.com>
Co-authored-by: chad11111 <chad1111@tutanota.com>
Co-authored-by: IdanSchiller <58664272+IdanSchiller@users.noreply.github.com>
Co-authored-by: dav-sap <16819417+dav-sap@users.noreply.github.com>
Co-authored-by: rotembm12 <46103618+rotembm12@users.noreply.github.com>
Co-authored-by: naorzr <naorzruk@gmail.com>
Co-authored-by: Gary Gensler <127234894+chad11111@users.noreply.github.com>
Co-authored-by: Tamir Abutbul <1tamir198@gmail.com>
Co-authored-by: Nir Parisian <nir2002@users.noreply.github.com>
This commit is contained in:
Andrey Pokhilko
2023-09-26 09:21:04 +01:00
committed by GitHub
parent 227966b2f1
commit e4240ed107
178 changed files with 39336 additions and 4050 deletions

View File

@@ -0,0 +1,167 @@
const xhr = new XMLHttpRequest();
const TRACK_EVENT_TYPE = "track";
const IDENTIFY_EVENT_TYPE = "identify";
const BASE_ANALYTIC_MSG = {
method: "POST",
mode: "cors",
cache: "no-cache",
headers: {
"Content-Type": "application/json",
"api-key": "komodor.analytics@admin.com"
},
redirect: "follow",
referrerPolicy: "no-referrer"
};
xhr.onload = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
const status = JSON.parse(xhr.responseText);
const version = status.CurVer;
if (status.Analytics) {
enableDD(version);
enableHeap(version, status.ClusterMode);
enableSegmentBackend(version, status.ClusterMode);
} else {
console.log("Analytics is disabled in this session");
}
}
};
xhr.open("GET", "/status", true);
xhr.send(null);
function enableDD(version) {
(function(h, o, u, n, d) {
h = h[d] = h[d] || {
q: [],
onReady: function(c) {
h.q.push(c);
}
};
d = o.createElement(u);
d.async = true;
d.src = n;
n = o.getElementsByTagName(u)[0];
n.parentNode.insertBefore(d, n);
})(
window,
document,
"script",
"https://www.datadoghq-browser-agent.com/datadog-rum-v4.js",
"DD_RUM"
);
DD_RUM.onReady(function() {
DD_RUM.init({
clientToken: "pub16d64cd1c00cf073ce85af914333bf72",
applicationId: "e75439e5-e1b3-46ba-a9e9-a2e58579a2e2",
site: "datadoghq.com",
service: "helm-dashboard",
version: version,
trackInteractions: true,
trackResources: true,
trackLongTasks: true,
defaultPrivacyLevel: "mask",
sessionReplaySampleRate: 0
});
});
}
function enableHeap(version, inCluster) {
(window.heap = window.heap || []),
(heap.load = function(e, t) {
(window.heap.appid = e), (window.heap.config = t = t || {});
let r = document.createElement("script");
(r.type = "text/javascript"),
(r.async = !0),
(r.src = "https://cdn.heapanalytics.com/js/heap-" + e + ".js");
let a = document.getElementsByTagName("script")[0];
a.parentNode.insertBefore(r, a);
for (
let n = function(e) {
return function() {
heap.push([e].concat(Array.prototype.slice.call(arguments, 0)));
};
},
p = [
"addEventProperties",
"addUserProperties",
"clearEventProperties",
"identify",
"resetIdentity",
"removeEventProperty",
"setEventProperties",
"track",
"unsetEventProperty"
],
o = 0;
o < p.length;
o++
)
heap[p[o]] = n(p[o]);
});
heap.load("4249623943");
window.heap.addEventProperties({
version: version,
installationMode: inCluster ? "cluster" : "local"
});
}
function sendStats(name, prop) {
if (window.heap) {
window.heap.track(name, prop);
}
}
function enableSegmentBackend(version, ClusterMode) {
sendToSegmentThroughAPI(
"helm dashboard loaded",
{ version, installationMode: ClusterMode ? "cluster" : "local" },
TRACK_EVENT_TYPE
);
}
function sendToSegmentThroughAPI(eventName, properties, segmentCallType) {
const userId = getUserId();
try {
sendData(properties, segmentCallType, userId, eventName);
} catch (e) {
console.log("failed sending data to segment", e);
}
}
function sendData(data, eventType, userId, eventName) {
const body = createBody(eventType, userId, data, eventName);
return fetch(`https://api.komodor.com/analytics/segment/${eventType}`, {
...BASE_ANALYTIC_MSG,
body: JSON.stringify(body)
});
}
function createBody(segmentCallType, userId, params, eventName) {
const data = { userId: userId };
if (segmentCallType === IDENTIFY_EVENT_TYPE) {
data["traits"] = params;
} else if (segmentCallType === TRACK_EVENT_TYPE) {
if (!eventName) {
throw new Error("no eventName parameter on segment track call");
}
data["properties"] = params;
data["eventName"] = eventName;
}
return data;
}
const getUserId = (() => {
let userId = null;
return () => {
if (!userId) {
userId = crypto.randomUUID ? crypto.randomUUID() : uuid();
}
return userId;
};
})();
function uuid() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
let r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}