From 1ec92489755db5acb37df4a0582a360bea2d8d08 Mon Sep 17 00:00:00 2001 From: Pranshu Chittora Date: Mon, 12 Sep 2022 16:26:01 +0530 Subject: [PATCH] feat: getting started page (#1560) Co-authored-by: palashgdev --- frontend/public/Logos/elixir.png | Bin 0 -> 4523 bytes frontend/public/Logos/go.png | Bin 0 -> 2968 bytes frontend/public/Logos/java.png | Bin 0 -> 3259 bytes frontend/public/Logos/javascript.png | Bin 0 -> 1682 bytes frontend/public/Logos/ms-net-framework.png | Bin 0 -> 4252 bytes frontend/public/Logos/php.png | Bin 0 -> 3476 bytes frontend/public/Logos/python.png | Bin 0 -> 2722 bytes frontend/public/Logos/rails.png | Bin 0 -> 1705 bytes frontend/public/Logos/rust.png | Bin 0 -> 2302 bytes frontend/src/constants/routes.ts | 2 +- frontend/src/container/SideNav/Slack.tsx | 14 +- frontend/src/container/SideNav/menuItems.ts | 2 +- .../container/TopNav/Breadcrumbs/index.tsx | 2 +- .../src/pages/AddInstrumentation/DocCard.tsx | 30 +++ .../src/pages/AddInstrumentation/Section.tsx | 43 +++++ .../src/pages/AddInstrumentation/index.tsx | 42 +---- .../pages/AddInstrumentation/renderConfig.tsx | 175 ++++++++++++++++++ .../src/pages/AddInstrumentation/styles.ts | 12 +- .../src/pages/AddInstrumentation/types.ts | 10 + .../src/pages/AddInstrumentation/utmParams.ts | 3 + 20 files changed, 295 insertions(+), 40 deletions(-) create mode 100644 frontend/public/Logos/elixir.png create mode 100644 frontend/public/Logos/go.png create mode 100644 frontend/public/Logos/java.png create mode 100644 frontend/public/Logos/javascript.png create mode 100644 frontend/public/Logos/ms-net-framework.png create mode 100644 frontend/public/Logos/php.png create mode 100644 frontend/public/Logos/python.png create mode 100644 frontend/public/Logos/rails.png create mode 100644 frontend/public/Logos/rust.png create mode 100644 frontend/src/pages/AddInstrumentation/DocCard.tsx create mode 100644 frontend/src/pages/AddInstrumentation/Section.tsx create mode 100644 frontend/src/pages/AddInstrumentation/renderConfig.tsx create mode 100644 frontend/src/pages/AddInstrumentation/types.ts create mode 100644 frontend/src/pages/AddInstrumentation/utmParams.ts diff --git a/frontend/public/Logos/elixir.png b/frontend/public/Logos/elixir.png new file mode 100644 index 0000000000000000000000000000000000000000..909a736e0f07d0b771dd63c713e3947e8570b7fc GIT binary patch literal 4523 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 JPDHLkV1hZ3oKOG& literal 0 HcmV?d00001 diff --git a/frontend/public/Logos/go.png b/frontend/public/Logos/go.png new file mode 100644 index 0000000000000000000000000000000000000000..70f7bd9728a60137acf5db06995e4d827f39d946 GIT binary patch literal 2968 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 literal 0 HcmV?d00001 diff --git a/frontend/public/Logos/python.png b/frontend/public/Logos/python.png new file mode 100644 index 0000000000000000000000000000000000000000..664f75d425fc7027bde93c4b39beb0105b2ef7e0 GIT binary patch literal 2722 zcmV;T3SISyP)J0Hl+(nqIUEB98|?M&dXG8Y>zm7S?94LjFjSHDlSZ>| zcIWuM-}&AwKnW$3P(leMlu$wmjzDmGAl-+NwsFm0D66a%)*eb3et;E@nM@CMAH$DUtVHL-aw^7$GlAtZaX zL=ZHx^*cE22*M1ywneGeR#>> z?$|yT7=1k{65oJ5|kU0^Vil}aKuS{W-F22qRkN?@2;vjAXU zJv{P-Pm^TiR=BpdHh^p9nyy1z9K@&NHx-y*5lvbB(8f@8A2C`H*eR_;Nh@M)9wK7RbV`A|fb)35L(Z;sT>6v4zLz|2bBZx56-=8|N=k>EY zzW>~jE-2DvMiUOcWshxN9h)?JJ8g&WB!&lzrC!o)zp-2EAQ0Vt6DO-a!5*&dou)bLn@a1b>=@TI2hEiJVnC;~-^ zP%~>~q-yf~E!39Prc#EDU7vmHYaU~;olIFjW2`1bJN`=kkOh$MEyzMtM18A&`Ao}V zC?eF05dlrV_sh$u2Q0ULaEI~+*j^CXgP@={L}J2m@lcJmkL< zT;>JWB21mOvO?0rE*XMGUd`56C1>pvfe>>^B*rpmm_b^A`CJ=w>F|z?>nCkt5so-| zffgckUsvO6a!Jj7pMWC1DIhPAf$5>m7S^Z7K+Mx(x)5@-_E{ZALTH>@Zf-?D3|$(gmPMM21F_ci{P2*- z()H6$K9zU{XELX9B-cX?B`Dpk2HrfB=wXbwT!!)Act7!zZ&u8>=kA%m35U>fy&OtJ z4doHASp<6A??Yq3C0u)gkWFVKW<;7GlLCvQnuRgW@yWrLDzCo!i)~NT&2G3OvN#y< z-&^n|k}HEkDx2lXL!mkIXah8zmOa)?@@67n8s~!RwFkE%P_t&QW5wKzeFJ0`B|X@; z{l4-&e{S8j=*4K%zl!>|^SuaBiGb2-(=8g3mJ>w>qM|Kv{g?=%fcwEETqnlf?rYtY zoRF98aensaxlCJa{~!0ZerMs!(Q;~iM*)aV%Crgji4PYji+ShL8Pza%#U-^OMCd)3 zBLaUVzrn#)uOO+Oj-URlwRvqcQZ~==g2YJx=h9~q06PmHZM}V&PH+kL%~D54MilsV z0+xQj>J?Z_4xE1bL_=-)dix6zdjYUUOwdEX))T~=dX69p$-Zm3C!#Pob9|ikRWKeL1#q&qV2E)ix5qZZsOPBTY+5+_{N6;jTVlnCK$4fw z{F5$*3_)H#&_%(b)XdYGYVFmCan`3=4_mA`^1a~b=Jv-0L&%8a!sX1a0|zd0E_oFv z!s)-h_%WAG?k_w~uzH|f>P8WqiWY&Kd;516uAV*mbupJ| z!%8b`st|hbPmC@Kh22^cL@3}51#$$Ev?j@OJ=te}@Iv>W;5Mu=id}E)c(1Ff>AtyZ zzP8F=5u4#-12HUhIMnJQ#}8Ea1Dx`J0M;hP+SqWM*posUbEyOOf4f6kTjY!6GwSyaA`EmTPVN5jKCqdtuH7_qjAA);F%^_})#BDT z;lYIG1YY=vzOoeMiBB^OUhU}Pl{0Wypc9qv3e!TY@oaIFiNsc@bF!vQ3U63u$>T@#zY@`1P?{PdQMQY z_XtUwsju;vz|z+W;RQfw=gVe}$?q||gm)rF)(|1|6{P@V=n&xHQ$YHD3oO1Ob%K0HcXrEHp6)ydpCJ)o-+wL* zEnQgt{)C#~T>8Sa4uM^jFeF3+7{~&{e?s>e5Ck%KvNQF=r=IKn{rTQ(20VagB2bXs zf4h8nAcbF>(Ga{&SIc7brARd;%p$<%{=s~jylS80$;Eh5c=erQgHNt{xcyBkKpH&4 z?fP%CZ~gM>aO>lZvnSVu7SdN~i^FB4fn`x8O-fNJM_R;WIFlhgxt!R3b&&tyzh{#t zA9?27Rgf1My#0Uk?GnKVM%y+&TFb7P6Jh^xdRW+dxL0UzAL&5V#-fB0N+_X(5=tnc cg#SDK2UN38o*A2hx=6E$&3++&ouM;~3I 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 Y1!w-R)&)lw_W%F@07*qoM6N<$g4dL2UjP6A literal 0 HcmV?d00001 diff --git a/frontend/src/constants/routes.ts b/frontend/src/constants/routes.ts index c9fc9fe90a..6fe138d33b 100644 --- a/frontend/src/constants/routes.ts +++ b/frontend/src/constants/routes.ts @@ -6,7 +6,7 @@ const ROUTES = { TRACE: '/trace', TRACE_DETAIL: '/trace/:id', SETTINGS: '/settings', - INSTRUMENTATION: '/add-instrumentation', + INSTRUMENTATION: '/get-started', USAGE_EXPLORER: '/usage-explorer', APPLICATION: '/application', ALL_DASHBOARD: '/dashboard', diff --git a/frontend/src/container/SideNav/Slack.tsx b/frontend/src/container/SideNav/Slack.tsx index c0abe5d3ba..f4f1e8e5c6 100644 --- a/frontend/src/container/SideNav/Slack.tsx +++ b/frontend/src/container/SideNav/Slack.tsx @@ -1,10 +1,14 @@ import React from 'react'; -function Slack(): JSX.Element { +interface ISlackProps { + width?: number; + height?: number; +} +function Slack({ width, height }: ISlackProps): JSX.Element { return ( ); } +Slack.defaultProps = { + width: 28, + height: 28, +}; export default Slack; diff --git a/frontend/src/container/SideNav/menuItems.ts b/frontend/src/container/SideNav/menuItems.ts index d3e400dedf..f811c333a3 100644 --- a/frontend/src/container/SideNav/menuItems.ts +++ b/frontend/src/container/SideNav/menuItems.ts @@ -62,7 +62,7 @@ const menus: SidebarMenu[] = [ { Icon: ApiOutlined, to: ROUTES.INSTRUMENTATION, - name: 'Add instrumentation', + name: 'Get Started', }, ]; diff --git a/frontend/src/container/TopNav/Breadcrumbs/index.tsx b/frontend/src/container/TopNav/Breadcrumbs/index.tsx index a79e5e3885..85cb0227a1 100644 --- a/frontend/src/container/TopNav/Breadcrumbs/index.tsx +++ b/frontend/src/container/TopNav/Breadcrumbs/index.tsx @@ -8,7 +8,7 @@ const breadcrumbNameMap = { [ROUTES.TRACE]: 'Traces', [ROUTES.SERVICE_MAP]: 'Service Map', [ROUTES.USAGE_EXPLORER]: 'Usage Explorer', - [ROUTES.INSTRUMENTATION]: 'Add instrumentation', + [ROUTES.INSTRUMENTATION]: 'Get Started', [ROUTES.SETTINGS]: 'Settings', [ROUTES.DASHBOARD]: 'Dashboard', [ROUTES.ALL_ERROR]: 'Exceptions', diff --git a/frontend/src/pages/AddInstrumentation/DocCard.tsx b/frontend/src/pages/AddInstrumentation/DocCard.tsx new file mode 100644 index 0000000000..38bf63c16d --- /dev/null +++ b/frontend/src/pages/AddInstrumentation/DocCard.tsx @@ -0,0 +1,30 @@ +import { Typography } from 'antd'; +import React from 'react'; +import { useSelector } from 'react-redux'; +import { Link } from 'react-router-dom'; +import { AppState } from 'store/reducers'; +import AppReducer from 'types/reducer/app'; + +import { DocCardContainer } from './styles'; +import { TGetStartedContentDoc } from './types'; +import UTMParams from './utmParams'; + +interface IDocCardProps { + text: TGetStartedContentDoc['title']; + icon: TGetStartedContentDoc['icon']; + url: TGetStartedContentDoc['url']; +} +function DocCard({ icon, text, url }: IDocCardProps): JSX.Element { + const { isDarkMode } = useSelector((state) => state.app); + + return ( + + + {icon} + {text} + + + ); +} + +export default DocCard; diff --git a/frontend/src/pages/AddInstrumentation/Section.tsx b/frontend/src/pages/AddInstrumentation/Section.tsx new file mode 100644 index 0000000000..4a90b746de --- /dev/null +++ b/frontend/src/pages/AddInstrumentation/Section.tsx @@ -0,0 +1,43 @@ +import { Col, Row, Typography } from 'antd'; +import { map } from 'lodash-es'; +import React from 'react'; + +import DocCard from './DocCard'; +import { TGetStartedContentSection } from './types'; + +interface IDocSectionProps { + sectionData: TGetStartedContentSection; +} + +function DocSection({ sectionData }: IDocSectionProps): JSX.Element { + return ( +
+ {sectionData.heading} + + {sectionData.description && ( + + {sectionData.description} + + )} + {map(sectionData.items, (item, idx) => ( + + + + ))} + +
+ ); +} + +export default DocSection; diff --git a/frontend/src/pages/AddInstrumentation/index.tsx b/frontend/src/pages/AddInstrumentation/index.tsx index f4adc07b2c..5703239b51 100644 --- a/frontend/src/pages/AddInstrumentation/index.tsx +++ b/frontend/src/pages/AddInstrumentation/index.tsx @@ -1,43 +1,19 @@ import { Typography } from 'antd'; import React from 'react'; -import { useSelector } from 'react-redux'; -import { AppState } from 'store/reducers'; -import AppReducer from 'types/reducer/app'; -import { Container, Heading } from './styles'; +import { GetStartedContent } from './renderConfig'; +import DocSection from './Section'; function InstrumentationPage(): JSX.Element { - const { isDarkMode } = useSelector((state) => state.app); - return ( <> - Instrument your application - - Congrats, you have successfully installed SigNoz!{' '} - - To start seeing YOUR application data here, follow the instructions in the - docs - - - - https://signoz.io/docs/instrumentation/overview - -  If you face any issues, join our - -  slack community  - - to ask any questions or mail us at  - - support@signoz.io - - + + Congrats, you have successfully installed SigNoz! Now lets get some data in + and start deriving insights from them + + {GetStartedContent().map((section) => { + return ; + })} ); } diff --git a/frontend/src/pages/AddInstrumentation/renderConfig.tsx b/frontend/src/pages/AddInstrumentation/renderConfig.tsx new file mode 100644 index 0000000000..86aa6b5ed7 --- /dev/null +++ b/frontend/src/pages/AddInstrumentation/renderConfig.tsx @@ -0,0 +1,175 @@ +import { + AlertFilled, + AlignLeftOutlined, + ApiFilled, + BarChartOutlined, + DashboardFilled, + SoundFilled, +} from '@ant-design/icons'; +import { Typography } from 'antd'; +import Slack from 'container/SideNav/Slack'; +import React from 'react'; +import store from 'store'; + +import { TGetStartedContentSection } from './types'; + +export const GetStartedContent = (): TGetStartedContentSection[] => { + const { + app: { currentVersion }, + } = store.getState(); + return [ + { + heading: 'Send data from your applications to SigNoz', + items: [ + { + title: 'Instrument your Java Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/java/', + }, + { + title: 'Instrument your Python Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/python/', + }, + { + title: 'Instrument your JS Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/javascript/', + }, + { + title: 'Instrument your Go Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/golang/', + }, + { + title: 'Instrument your .NET Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/dotnet/', + }, + { + title: 'Instrument your PHP Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/php/', + }, + { + title: 'Instrument your Rails Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/ruby-on-rails/', + }, + { + title: 'Instrument your Rust Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/rust/', + }, + { + title: 'Instrument your Elixir Application', + icon: ( + + ), + url: 'https://signoz.io/docs/instrumentation/elixir/', + }, + ], + }, + { + heading: 'Send Metrics from your Infrastructure & create Dashboards', + items: [ + { + title: 'Send metrics to SigNoz', + icon: , + url: 'https://signoz.io/docs/userguide/send-metrics/', + }, + { + title: 'Create and Manage Dashboards', + icon: , + url: 'https://signoz.io/docs/userguide/manage-dashboards-and-panels/', + }, + ], + }, + { + heading: 'Send your logs to SigNoz', + items: [ + { + title: 'Send your logs to SigNoz', + icon: , + url: 'https://signoz.io/docs/userguide/logs/', + }, + { + title: 'Existing log collectors to SigNoz', + icon: , + url: 'https://signoz.io/docs/userguide/fluentbit_to_signoz/', + }, + ], + }, + { + heading: 'Create alerts on Metrics', + items: [ + { + title: 'Create alert rules on metrics', + icon: , + url: 'https://signoz.io/docs/userguide/alerts-management/', + }, + { + title: 'Configure alert notification channels', + icon: , + url: + 'https://signoz.io/docs/userguide/alerts-management/#setting-up-a-notification-channel', + }, + ], + }, + { + heading: 'Need help?', + description: ( + <> + {'Join our slack community and ask any question you may have on '} + + #support + + {' or '} + + #general + + + ), + + items: [ + { + title: 'Join SigNoz slack community ', + icon: ( +
+ +
+ ), + url: 'https://signoz.io/slack', + }, + ], + }, + ]; +}; diff --git a/frontend/src/pages/AddInstrumentation/styles.ts b/frontend/src/pages/AddInstrumentation/styles.ts index af4a0bfb29..6e1ec7ad44 100644 --- a/frontend/src/pages/AddInstrumentation/styles.ts +++ b/frontend/src/pages/AddInstrumentation/styles.ts @@ -1,4 +1,4 @@ -import { Card, Typography } from 'antd'; +import { Card, Row, Typography } from 'antd'; import styled from 'styled-components'; interface Props { @@ -18,3 +18,13 @@ export const Heading = styled(Typography)` margin-bottom: 1rem; } `; + +export const DocCardContainer = styled(Row)<{ + isDarkMode: boolean; +}>` + display: flex; + border: 1px solid ${({ isDarkMode }): string => (isDarkMode ? '#444' : '#ccc')}; + border-radius: 0.2rem; + align-items: center; + padding: 0.5rem 0.25rem; +`; diff --git a/frontend/src/pages/AddInstrumentation/types.ts b/frontend/src/pages/AddInstrumentation/types.ts new file mode 100644 index 0000000000..b544254038 --- /dev/null +++ b/frontend/src/pages/AddInstrumentation/types.ts @@ -0,0 +1,10 @@ +export type TGetStartedContentDoc = { + title: string; + icon: JSX.Element; + url: string; +}; +export type TGetStartedContentSection = { + heading: string; + description?: string | JSX.Element; + items: TGetStartedContentDoc[]; +}; diff --git a/frontend/src/pages/AddInstrumentation/utmParams.ts b/frontend/src/pages/AddInstrumentation/utmParams.ts new file mode 100644 index 0000000000..1aa01f503b --- /dev/null +++ b/frontend/src/pages/AddInstrumentation/utmParams.ts @@ -0,0 +1,3 @@ +const UTMParams = + '?utm_source=instrumentation_page&utm_medium=frontend&utm_term=language'; +export default UTMParams;