From b38b5d9d96574074fd1729d42e5b65edc90ecfaa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Apr 2026 03:46:42 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Sync=202026-04-11=2003:46:42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luci-app-netdata/.img/config.png | Bin 33465 -> 0 bytes luci-app-netdata/.img/netdata.png | Bin 82894 -> 0 bytes luci-app-netdata/LICENSE | 674 ------------------ luci-app-netdata/Makefile | 22 +- luci-app-netdata/README.md | 50 -- .../resources/view/netdata/advanced.js | 35 - .../resources/view/netdata/basic.js | 183 +++++ .../resources/view/netdata/config.js | 168 +---- .../resources/view/netdata/main.js | 26 - .../resources/view/netdata/netdata.js | 73 ++ luci-app-netdata/po/templates/netdata.pot | 93 --- luci-app-netdata/po/zh_Hans/netdata.po | 103 +-- luci-app-netdata/po/zh_Hant/netdata.po | 104 --- .../root/etc/uci-defaults/luci-app-netdata | 30 + .../share/luci/menu.d/luci-app-netdata.json | 24 +- .../root/usr/share/netdata/webcn/netdata.conf | 33 + .../usr/share/netdata/webcn/netdata.config | 3 + .../root/usr/share/netdata/webcn/netdata.init | 105 +++ .../share/rpcd/acl.d/luci-app-netdata.json | 12 +- .../root/usr/share/rpcd/ucode/luci.netdata | 53 ++ 20 files changed, 555 insertions(+), 1236 deletions(-) delete mode 100644 luci-app-netdata/.img/config.png delete mode 100644 luci-app-netdata/.img/netdata.png delete mode 100644 luci-app-netdata/LICENSE delete mode 100644 luci-app-netdata/README.md delete mode 100644 luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js create mode 100644 luci-app-netdata/htdocs/luci-static/resources/view/netdata/basic.js delete mode 100644 luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js create mode 100644 luci-app-netdata/htdocs/luci-static/resources/view/netdata/netdata.js delete mode 100644 luci-app-netdata/po/templates/netdata.pot delete mode 100644 luci-app-netdata/po/zh_Hant/netdata.po create mode 100644 luci-app-netdata/root/etc/uci-defaults/luci-app-netdata create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/netdata.config create mode 100644 luci-app-netdata/root/usr/share/netdata/webcn/netdata.init create mode 100644 luci-app-netdata/root/usr/share/rpcd/ucode/luci.netdata diff --git a/luci-app-netdata/.img/config.png b/luci-app-netdata/.img/config.png deleted file mode 100644 index debe4d5c9370d7e0602ae1dc33c70df18c2fa030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33465 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 diff --git a/luci-app-netdata/.img/netdata.png b/luci-app-netdata/.img/netdata.png deleted file mode 100644 index 3a4be2f353b1f0e7044331dba58667326a02fa20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82894 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

SWV^lR&C{eK{>@_QljpX?1+NZ$QBX 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 diff --git a/luci-app-netdata/LICENSE b/luci-app-netdata/LICENSE deleted file mode 100644 index f288702d..00000000 --- a/luci-app-netdata/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/luci-app-netdata/Makefile b/luci-app-netdata/Makefile index e069c485..7727ee72 100644 --- a/luci-app-netdata/Makefile +++ b/luci-app-netdata/Makefile @@ -1,28 +1,18 @@ # SPDX-License-Identifier: GPL-3.0 # -# Copyright (C) 2022-2025 muink +# Copyright (C) 2021-2025 sirpdboy https://github.com/sirpdboy/luci-app-netdata include $(TOPDIR)/rules.mk -LUCI_NAME:=luci-app-netdata -LUCI_TITLE:=LuCI Netdata -LUCI_DEPENDS:=+netdata-ssl +openssl-util +LUCI_TITLE:=LuCI app for netdata +LUCI_DEPENDS:=+netdata -LUCI_DESCRIPTION:=Real-time performance monitoring - -PKG_MAINTAINER:=Anya Lin +PKG_NAME:=luci-app-netdata +PKG_VERSION:=2.0.4 +PKG_RELEASE:=4 PKG_LICENSE:=GPL-3.0 -define Package/$(LUCI_NAME)/conffiles -endef - -define Package/$(LUCI_NAME)/postinst -endef - -define Package/$(LUCI_NAME)/prerm -endef - include $(TOPDIR)/feeds/luci/luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/luci-app-netdata/README.md b/luci-app-netdata/README.md deleted file mode 100644 index 8f6f5582..00000000 --- a/luci-app-netdata/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# LuCI Netdata -> [Netdata][] is high-fidelity infrastructure monitoring and troubleshooting. -Open-source, free, preconfigured, opinionated, and always real-time. - -### Screenshots - -![config](.img/config.png "config") -![netdata](.img/netdata.png "netdata") - -### How to install - -1. Goto ~~[releases](https://github.com/muink/luci-app-netdata/tree/releases)~~ [here](https://fantastic-packages.github.io/packages/) -2. Download the latest version of ipk -3. Login router and goto **System --> Software** -4. Upload and install ipk -5. Reboot if the app is not automatically added in page -6. Goto **Status --> Netdata** -7. If after program update. LuCI is not working properly, please reinstall luci-app-netdata. -8. After you upgrade Netdata, you need to reinstall netdata and luci-app-netdata. - -### Build - -- Compile from OpenWrt/LEDE SDK - -``` -# Take the x86_64 platform as an example -tar xjf openwrt-sdk-21.02.3-x86-64_gcc-8.4.0_musl.Linux-x86_64.tar.xz -# Go to the SDK root dir -cd OpenWrt-sdk-*-x86_64_* -# First run to generate a .config file -make menuconfig -./scripts/feeds update -a -./scripts/feeds install -a -# Get Makefile -git clone --depth 1 --branch master --single-branch --no-checkout https://github.com/muink/luci-app-netdata.git package/luci-app-netdata -pushd package/luci-app-netdata -umask 022 -git checkout -popd -# Select the package LuCI -> Applications -> luci-app-netdata -make menuconfig -# Start compiling -make package/luci-app-netdata/compile V=99 -``` - -[Netdata]: https://github.com/netdata/netdata - -### License - -- This project is licensed under the [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js deleted file mode 100644 index 500a231e..00000000 --- a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; -'require view'; -'require fs'; -'require ui'; - -const isReadonlyView = !L.hasViewPermission() || null; - -return view.extend({ -handleSaveApply: null, -handleReset: null, - - load() { - return L.resolveDefault(fs.read('/etc/netdata/netdata.conf'), ''); - }, - - handleSave(ev) { - let value = (document.querySelector('textarea').value || '').trim().replace(/\r\n/g, '\n') + '\n'; - - return fs.write('/etc/netdata/netdata.conf', value).then((rc) => { - document.querySelector('textarea').value = value; - ui.addNotification(null, E('p', _('Contents have been saved.')), 'info'); - - return fs.exec('/etc/init.d/netdata', [ 'reload' ]); - }).catch((e) => { - ui.addNotification(null, E('p', _('Unable to save contents: %s').format(e.message))); - }); - }, - - render(conf) { - return E([ - E('h4', _('Edit Netdata main config: /etc/netdata/netdata.conf')), - E('p', {}, E('textarea', { 'style': 'width:100%', 'rows': 25, 'disabled': isReadonlyView }, [ conf != null ? conf : '' ])) - ]); - } -}); diff --git a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/basic.js b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/basic.js new file mode 100644 index 00000000..f0b65728 --- /dev/null +++ b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/basic.js @@ -0,0 +1,183 @@ +// Copyright (C) 2021-2025 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-netdata +'use strict'; +'require form'; +'require poll'; +'require rpc'; +'require uci'; +'require ui'; +'require view'; +'require fs'; +const getNetdataVersion = rpc.declare({ + object: 'luci.netdata', + method: 'get_version', + expect: { 'version': '' } +}); +async function checkProcess() { + try { + const pidofRes = await fs.exec('/bin/pidof', ['netdata']); + if (pidofRes.code === 0) { + return { + running: true, + pid: pidofRes.stdout.trim() + }; + } + } catch (err) { + // Ignore error + } + try { + const psRes = await fs.exec('/bin/ps', ['-C', 'netdata', '-o', 'pid=']); + const pid = psRes.stdout.trim(); + return { + running: pid !== '', + pid: pid || null + }; + } catch (err) { + return { running: false, pid: null }; + } +} +function getVersionInfo() { + return L.resolveDefault(getNetdataVersion(), {}).then(function(result) { + return result || {}; + }).catch(function(error) { + console.error('Failed to get version:', error); + return {}; + }); +} + +function getServiceStatus() { + return L.resolveDefault(checkProcess(), {}).then(function(res) { + let isRunning = false; + try { + if (res && res.running) { + isRunning = true; + } + } catch (e) { + console.error('Service status error:', e); + } + return isRunning; + }).catch(function(error) { + console.error('Service status check failed:', error); + return false; + }); +} + +function renderStatus(isRunning, webport, protocol, version) { + let statusText = isRunning ? _('RUNNING') : _('NOT RUNNING'); + let color = isRunning ? 'green' : 'red'; + let icon = isRunning ? '✓' : '✗'; + let versionText = version ? `${version}` : ''; + let html = String.format( + '%s %s %s - %s', + color, icon, _('Netdata'),versionText, statusText + ); + + if (isRunning) { + let buttonUrl = String.format('%s//%s:%s/', protocol, window.location.hostname, webport); + + html += String.format( + '', + _('Open Web UI'), + buttonUrl + ); + } + + return html; +} +return view.extend({ + load: function() { + return Promise.all([ + uci.load('netdata') + ]); + }, + + render: function(data) { + let m, s, o; + let webport = uci.get_first('netdata', 'netdata', 'port') || '19999'; + let uci_ssl = uci.get_first('netdata', 'netdata', 'enable_ssl') || '0'; + let protocol = uci_ssl === '1' ? 'https:' : 'http:'; + + m = new form.Map('netdata', _('Netdata'), + _('An open-source real-time performance monitoring and visualization tool')); + + // 状态显示部分 + s = m.section(form.TypedSection); + s.anonymous = true; + s.addremove = false; + + s.render = function() { + poll.add(function() { + return Promise.all([ + getServiceStatus(), + getVersionInfo() + ]).then(function(results) { + var [isRunning, version] = results; + var view = document.getElementById('service_status'); + if (view) { + view.innerHTML = renderStatus(isRunning, webport, protocol, version); + } + }).catch(function(error) { + console.error('Poll error:', error); + }); + }, 5); // 添加轮询间隔5秒 + + return E('div', { class: 'cbi-section', id: 'status_bar' }, [ + E('div', { id: 'service_status' }, + E('p', {}, _('Collecting data...')) + ), + E('div', { 'style': 'text-align: right; font-style: italic;' }, [ + E('span', {}, [ + _('© github '), + E('a', { + 'href': 'https://github.com/sirpdboy', + 'target': '_blank', + 'style': 'text-decoration: none;' + }, 'by sirpdboy') + ]) + ]) + ]); + }; + + // 配置部分 + s = m.section(form.NamedSection, 'netdata', 'netdata'); + + o = s.option(form.Flag, 'enabled', _('Enable')); + o.default = o.disabled; + o.rmempty = false; + + o = s.option(form.Value, 'port', _('Service port')); + o.datatype = 'port'; + o.placeholder = '19999'; + o.rmempty = false; + o.validate = function(section_id, value) { + if (value < 1 || value > 65535) { + return _('Port must be between 1 and 65535'); + } + return true; + }; + + o = s.option(form.Flag, 'enable_ssl', _('Enable SSL')); + o.rmempty = true; + + o = s.option(form.DummyValue, 'cert_file', _('Cert file')); + o.default = '/etc/ssl/ezopwrt.crt'; + o.depends('enable_ssl', '1'); + o.cfgvalue = function(section_id) { + return uci.get('netdata', section_id, 'cert_file') || '/etc/ssl/ezopwrt.crt'; + }; + + o = s.option(form.DummyValue, 'key_file', _('Cert Key file')); + o.default = '/etc/ssl/ezopwrt.key'; + o.depends('enable_ssl', '1'); + o.cfgvalue = function(section_id) { + return uci.get('netdata', section_id, 'key_file') || '/etc/ssl/ezopwrt.key'; + }; + + // o = s.option(form.DummyValue, 'feedback_info', _('feedback info')); + // o.href = 'https://github.com/sirpdboy'; + // o.cfgvalue = function() { + // return 'https://github.com/sirpdboy'; + // }; + + return m.render(); + } +}); \ No newline at end of file diff --git a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js index 855620c5..aa4fcd1d 100644 --- a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js +++ b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js @@ -1,162 +1,36 @@ +// Copyright (C) 2021-2025 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-netdata 'use strict'; 'require view'; 'require fs'; -'require uci'; 'require ui'; -'require form'; + +const isReadonlyView = !L.hasViewPermission() || null; return view.extend({ -// handleSaveApply: null, -// handleSave: null, -// handleReset: null, +handleSaveApply: null, +handleReset: null, load() { - return Promise.all([ - L.resolveDefault(fs.stat('/usr/sbin/nginx'), {}), - uci.load('netdata') - ]); + return L.resolveDefault(fs.read('/etc/netdata/netdata.conf'), ''); }, - render(res) { - const has_nginx = res[0].path; + handleSave(ev) { + let value = (document.querySelector('textarea').value || '').trim().replace(/\r\n/g, '\n') + '\n'; - let m, s, o; + return fs.write('/etc/netdata/netdata.conf', value).then((rc) => { + document.querySelector('textarea').value = value; + ui.addNotification(null, E('p', _('Contents have been saved.')), 'info'); - m = new form.Map('netdata'); + return fs.exec('/etc/init.d/netdata', [ 'restart' ]); + }).catch((e) => { + ui.addNotification(null, E('p', _('Unable to save contents: %s').format(e.message))); + }); + }, - s = m.section(form.TypedSection, 'netdata'); - s.anonymous = true; - - o = s.option(form.Flag, 'enabled', _('Enable')); - o.rmempty = false; - - o = s.option(form.Value, 'port', _('Service port')); - o.datatype = 'port'; - o.placeholder = '19999'; - o.rmempty = false; - - o = s.option(form.Flag, 'enable_ssl', _('Enable SSL')); - o.rmempty = true; - o.depends('nginx_support', '0'); - - o = s.option(form.Value, 'cert_file', _('Cert file')); - o.placeholder = '/etc/netdata/cert.crt'; - o.rmempty = false; - o.retain = true; - o.depends('enable_ssl', '1'); - - o = s.option(form.Value, 'key_file', _('Cert Key file')); - o.placeholder = '/etc/netdata/cert.key'; - o.rmempty = false; - o.retain = true; - o.depends('enable_ssl', '1'); - - o = s.option(form.Flag, 'nginx_support', _('Nginx Support')); - o.rmempty = true; - if (! has_nginx) { - o.description = _('To enable this feature you need install luci-nginx and luci-ssl-nginx
first'); - o.readonly = true; - } - - o.write = function(section, value) { - uci.set('netdata', section, 'nginx_support', has_nginx ? value : null); - }; - - o = s.option(form.Flag, 'auth', _('Enable Auth')); - o.rmempty = true; - o.depends('nginx_support', '1'); - - o.write = function(section, value) { - uci.set('netdata', section, 'auth', has_nginx ? value : null); - }; - - o = s.option(form.Value, 'user_passwd', _('Login Username and Password hash')); - o.placeholder = 'admin:$apr1$t7qQjoqb$YBHtAb7VGSkjIdObMG.Oy0'; - o.rmempty = false; - o.retain = true; - o.depends('auth', '1'); - - o = s.option(form.Button, '_webui', _('Open Web UI')); - o.inputtitle = _('Open'); - o.inputstyle = 'apply'; - o.onclick = L.bind(function(ev, section_id) { - const port=uci.get('netdata', section_id, 'port') || '19999'; - const ssl=uci.get('netdata', section_id, 'enable_ssl') || '0'; - const nginx=uci.get('netdata', section_id, 'nginx_support') || '0'; - - window.open((nginx === '1' ? window.location.protocol : ssl === '1' ? 'https:' : 'http:') + '//' + window.location.hostname + (nginx === '1' ? '/netdata/' : ':' + port)); - }, o) - - o = s.option(form.Button, '_start', _('Start') + ' ' + _('Netdata')); - o.inputtitle = _('Start'); - o.inputstyle = 'apply'; - o.onclick = function() { - return fs.exec('/etc/init.d/netdata', ['start']) - .catch((e) => { ui.addNotification(null, E('p', e.message), 'error') }); - }; - - o = s.option(form.Button, '_stop', _('Stop') + ' ' + _('Netdata')); - o.inputtitle = _('Stop'); - o.inputstyle = 'reset'; - o.onclick = function() { - return fs.exec('/etc/init.d/netdata', ['stop']) - .catch((e) => { ui.addNotification(null, E('p', e.message), 'error') }); - }; - - s = m.section(form.TypedSection, '_utilities'); - s.render = L.bind(function(view, section_id) { - return E('div',{ 'class': 'cbi-section' }, [ - E('h3', {}, [ _('Password hash generator') ]), - E('div', { 'class': 'generator' }, [ - E('div', { 'class': 'control-group' }, [ - E('button', { - 'class': 'cbi-button cbi-button-neutral', - 'click': ui.createHandlerFn(this, () => { - let npwn = this.map.findElement('id', '_passwd_type'); - - if (npwn.type == 'password') { - npwn.setAttribute('type', 'text'); - } else if (npwn.type == 'text') { - npwn.setAttribute('type', 'password'); - } - }) - }, '*'), - E('input', { - 'id': '_passwd_type', - 'style': 'margin:5px 0', - 'class': 'cbi-input-password', - 'type': 'password', - 'value': 'type new passwd here' - }) - ]), - E('button', { - 'class': 'cbi-button cbi-button-action', - 'click': ui.createHandlerFn(this, () => { - let npw = this.map.findElement('id', '_passwd_type').value, - button = document.querySelector('.generator > .cbi-button'), - out = this.map.findElement('id', '_passwd_hash_out'); - - button.setAttribute('disabled', 'true'); - - return fs.exec('/usr/bin/openssl', [ 'passwd', '-apr1', npw ]).then((res) => { - out.value = res.stdout || ''; - }).catch(e => { - ui.addNotification(null, E('p', e.message), 'error'); - }).finally(() => { - button.removeAttribute('disabled'); - }); - }) - }, [ _('GenNew') ]), - E('input', { - 'id': '_passwd_hash_out', - 'style': 'margin:5px 0; width:320px', - 'type': 'text', - 'readonly': '' - }) - ]) - ]); - }, o, this); - - return m.render(); + render(conf) { + return E([ + E('h4', _('Edit Netdata main config: /etc/netdata/netdata.conf')), + E('p', {}, E('textarea', { 'style': 'width:100%', 'rows': 25, 'disabled': isReadonlyView }, [ conf != null ? conf : '' ])) + ]); } }); diff --git a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js deleted file mode 100644 index c931c6fb..00000000 --- a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; -'require view'; -'require uci'; - -return view.extend({ - handleSaveApply: null, - handleSave: null, - handleReset: null, - - load() { - return uci.load('netdata'); - }, - - render() { - var port = uci.get_first('netdata', 'netdata', 'port') || '19999', - ssl = uci.get_first('netdata', 'netdata', 'enable_ssl') || '0', - nginx = uci.get_first('netdata', 'netdata', 'nginx_support') || '0'; - if (port === '0') - return E('div', { class: 'alert-message warning' }, - _('Port 0 is not supported.
Change to a other port and try again.')); - return E('iframe', { - src: (nginx === '1' ? window.location.protocol : ssl === '1' ? 'https:' : 'http:') + '//' + window.location.hostname + (nginx === '1' ? '/netdata/' : ':' + port), - style: 'width: 100%; min-height: 100vh; border: none; border-radius: 3px;' - }); - } -}); diff --git a/luci-app-netdata/htdocs/luci-static/resources/view/netdata/netdata.js b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/netdata.js new file mode 100644 index 00000000..56a2e58a --- /dev/null +++ b/luci-app-netdata/htdocs/luci-static/resources/view/netdata/netdata.js @@ -0,0 +1,73 @@ +// Copyright (C) 2021-2025 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-netdata +'use strict'; +'require view'; +'require fs'; +'require ui'; +'require uci'; +'require form'; +'require poll'; + +return view.extend({ + + load: function() { + return uci.load('netdata'); + }, + + checkRunning: function() { + return fs.exec('/bin/pidof', ['netdata']).then(function(pidRes) { + if (pidRes.code === 0) return { isRunning: true }; + return fs.exec('/bin/ash', ['-c', 'ps | grep -q "[n]etdata"']).then(function(grepRes) { + return { isRunning: grepRes.code === 0 }; + }); + }); + }, + + render: function() { + var self = this; + return this.checkRunning().then(function(checkResult) { + var isRunning = checkResult.isRunning; + let webport = uci.get_first('netdata', 'netdata', 'port') || '19999'; + let uci_ssl = uci.get_first('netdata', 'netdata', 'enable_ssl') || '0'; + let nginx = uci.get_first('netdata', 'netdata', 'nginx_support') || '0'; + let protocol = nginx === '1' ? window.location.protocol : uci_ssl === '1' ? 'https:' : 'http:'; + let buttonUrl = String.format('%s//%s:%s/#menu_system', protocol, window.location.hostname, webport); + + var container = E('div'); + if (!isRunning) { + var message = _('Netdata Service Not Running'); + container.appendChild(E('div', { + style: 'text-align: center; padding: 2em;' + }, [ + E('img', { + src: 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMjQiIGhlaWdodD0iMTAyNCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCI+PHBhdGggZmlsbD0iI2RmMDAwMCIgZD0iTTk0Mi40MjEgMjM0LjYyNGw4MC44MTEtODAuODExLTE1My4wNDUtMTUzLjA0NS04MC44MTEgODAuODExYy03OS45NTctNTEuNjI3LTE3NS4xNDctODEuNTc5LTI3Ny4zNzYtODEuNTc5LTI4Mi43NTIgMC01MTIgMjI5LjI0OC01MTIgNTEyIDAgMTAyLjIyOSAyOS45NTIgMTk3LjQxOSA4MS41NzkgMjc3LjM3NmwtODAuODExIDgwLjgxMSAxNTMuMDQ1IDE1My4wNDUgODAuODExLTgwLjgxMWM3OS45NTcgNTEuNjI3IDE3NS4xNDcgODEuNTc5IDI3Ny4zNzYgODEuNTc5IDI4Mi43NTIgMCA1MTItMjI5LjI0OCA1MTItNTEyIDAtMTAyLjIyOS0yOS45NTItMTk3LjQxOS04MS41NzktMjc3LjM3NnpNMTk0Ljk0NCA1MTJjMC0xNzUuMTA0IDE0MS45NTItMzE3LjA1NiAzMTcuMDU2LTMxNy4wNTYgNDggMCA5My40ODMgMTAuNjY3IDEzNC4yMjkgMjkuNzgxbC00MjEuNTQ3IDQyMS41NDdjLTE5LjA3Mi00MC43ODktMjkuNzM5LTg2LjI3Mi0yOS43MzktMTM0LjI3MnpNNTEyIDgyOS4wNTZjLTQ4IDAtOTMuNDgzLTEwLjY2Ny0xMzQuMjI5LTI5Ljc4MWw0MjEuNTQ3LTQyMS41NDdjMTkuMDcyIDQwLjc4OSAyOS43ODEgODYuMjcyIDI5Ljc4MSAxMzQuMjI5LTAuMDQzIDE3NS4xNDctMTQxLjk5NSAzMTcuMDk5LTMxNy4wOTkgMzE3LjA5OXoiLz48L3N2Zz4=', + style: 'width: 100px; height: 100px; margin-bottom: 1em;' + }), + E('h2', {}, message) + ])); + } else { + var iframe = E('iframe', { + src: buttonUrl, + style: 'width: 100%; min-height: 100vh; border: none;' + }); + container.appendChild(iframe); + } + + poll.add(function() { + return self.checkRunning().then(function(checkResult) { + var newStatus = checkResult.isRunning; + if (newStatus !== isRunning) { + window.location.reload(); + } + }); + }, 5); + + poll.start(); + + return container; + }); + }, + + handleSaveApply: null, + handleSave: null, + handleReset: null +}); \ No newline at end of file diff --git a/luci-app-netdata/po/templates/netdata.pot b/luci-app-netdata/po/templates/netdata.pot deleted file mode 100644 index 9bf7e623..00000000 --- a/luci-app-netdata/po/templates/netdata.pot +++ /dev/null @@ -1,93 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:30 -msgid "Advanced" -msgstr "" - -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:22 -msgid "Config" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:21 -msgid "Contents have been saved." -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:31 -msgid "Edit Netdata main config: /etc/netdata/netdata.conf" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:30 -msgid "Enable" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:49 -msgid "Enable Auth" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:38 -msgid "Enable SSL" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:63 -msgid "Enable logger" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:134 -msgid "GenNew" -msgstr "" - -#: applications/luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json:3 -msgid "Grant UCI access for netdata" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:57 -msgid "Login Username and Password hash" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:75 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:83 -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:3 -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:14 -msgid "Netdata" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:67 -msgid "Open" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:66 -msgid "Open Web UI" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:94 -msgid "Password hash generator" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js:19 -msgid "Port 0 is not supported.
Change to a other port and try again." -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:33 -msgid "Service port" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:75 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:76 -msgid "Start" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:83 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:84 -msgid "Stop" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:41 -msgid "" -"To enable this feature you need install luci-nginx and luci-ssl-" -"nginx
first" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:25 -msgid "Unable to save contents: %s" -msgstr "" diff --git a/luci-app-netdata/po/zh_Hans/netdata.po b/luci-app-netdata/po/zh_Hans/netdata.po index 315d4658..13c59159 100644 --- a/luci-app-netdata/po/zh_Hans/netdata.po +++ b/luci-app-netdata/po/zh_Hans/netdata.po @@ -1,104 +1,55 @@ msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2023-04-28 11:30+0000\n" -"Last-Translator: muink \n" -"Language-Team: Chinese (Simplified) \n" -"Language: zh_Hans\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.12.1-dev\n" -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:30 -msgid "Advanced" -msgstr "高级" +msgid "Netdata" +msgstr "实时监控" -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:22 -msgid "Config" -msgstr "配置" +msgid "Basic Setting" +msgstr "基本设置" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:21 -msgid "Contents have been saved." -msgstr "" +msgid "Config Setting" +msgstr "配置文件" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:31 msgid "Edit Netdata main config: /etc/netdata/netdata.conf" msgstr "编辑 Netdata 主配置: /etc/netdata/netdata.conf" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:30 msgid "Enable" msgstr "启用" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:49 -msgid "Enable Auth" -msgstr "启用验证" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:38 + msgid "Enable SSL" -msgstr "启用 SSL" +msgstr "SSL启用https访问" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:63 msgid "Enable logger" msgstr "启用日志记录器" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:134 -msgid "GenNew" -msgstr "生成新的" +msgid "An open-source real-time performance monitoring and visualization tool" +msgstr "一款开源的实时性能监控与可视化工具" -#: applications/luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json:3 -msgid "Grant UCI access for netdata" -msgstr "授予访问 LuCI 应用 netdata 的权限" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:57 -msgid "Login Username and Password hash" -msgstr "登入用户名和密码哈希" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:75 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:83 -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:3 -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:14 -msgid "Netdata" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:67 -msgid "Open" -msgstr "打开" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:66 msgid "Open Web UI" -msgstr "打开 Web UI" +msgstr "打开Web网页" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:94 -msgid "Password hash generator" -msgstr "密码哈希生成器" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js:19 -msgid "Port 0 is not supported.
Change to a other port and try again." -msgstr "不支持端口 0。
改为其他端口然后再试一次。" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:33 msgid "Service port" msgstr "服务端口" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:75 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:76 -msgid "Start" -msgstr "启动" +msgid "NOT RUNNING" +msgstr "未运行" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:83 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:84 -msgid "Stop" -msgstr "停止" +msgid "RUNNING" +msgstr "运行中" + +msgid "Netdata Service Not Running" +msgstr "Netdata服务未启用" + +msgid "Cert file" +msgstr "Cert文件" + +msgid "Cert Key file" +msgstr "Cert密钥文件" + +msgid "" +msgstr "" -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:41 msgid "" -"To enable this feature you need install luci-nginx and luci-ssl-" -"nginx
first" -msgstr "要启用此功能必须先安装 luci-nginxluci-ssl-nginx
" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:25 -msgid "Unable to save contents: %s" msgstr "" diff --git a/luci-app-netdata/po/zh_Hant/netdata.po b/luci-app-netdata/po/zh_Hant/netdata.po deleted file mode 100644 index 4abb7deb..00000000 --- a/luci-app-netdata/po/zh_Hant/netdata.po +++ /dev/null @@ -1,104 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2023-04-28 11:30+0000\n" -"Last-Translator: muink \n" -"Language-Team: Chinese (Traditional) \n" -"Language: zh_Hant\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.12.1-dev\n" - -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:30 -msgid "Advanced" -msgstr "進階" - -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:22 -msgid "Config" -msgstr "組態" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:21 -msgid "Contents have been saved." -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:31 -msgid "Edit Netdata main config: /etc/netdata/netdata.conf" -msgstr "編輯 Netdata 主要配置: /etc/netdata/netdata.conf" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:30 -msgid "Enable" -msgstr "啟用" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:49 -msgid "Enable Auth" -msgstr "啟用認證" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:38 -msgid "Enable SSL" -msgstr "啟用 SSL" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:63 -msgid "Enable logger" -msgstr "啟用日誌記錄器" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:134 -msgid "GenNew" -msgstr "生成新的" - -#: applications/luci-app-netdata/root/usr/share/rpcd/acl.d/luci-app-netdata.json:3 -msgid "Grant UCI access for netdata" -msgstr "授予訪問 LuCI 應用 netdata 的權限" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:57 -msgid "Login Username and Password hash" -msgstr "登入用戶名和密碼雜湊" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:75 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:83 -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:3 -#: applications/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json:14 -msgid "Netdata" -msgstr "" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:67 -msgid "Open" -msgstr "開啟" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:66 -msgid "Open Web UI" -msgstr "開啟 Web UI" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:94 -msgid "Password hash generator" -msgstr "密碼雜湊產生器" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/main.js:19 -msgid "Port 0 is not supported.
Change to a other port and try again." -msgstr "不支援埠號為 0。
變更為其他埠後重試。" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:33 -msgid "Service port" -msgstr "伺服通訊埠" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:75 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:76 -msgid "Start" -msgstr "啟動" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:83 -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:84 -msgid "Stop" -msgstr "停止" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/config.js:41 -msgid "" -"To enable this feature you need install luci-nginx and luci-ssl-" -"nginx
first" -msgstr "要啟用此功能必須先安裝 luci-nginxluci-ssl-nginx
" - -#: applications/luci-app-netdata/htdocs/luci-static/resources/view/netdata/advanced.js:25 -msgid "Unable to save contents: %s" -msgstr "" diff --git a/luci-app-netdata/root/etc/uci-defaults/luci-app-netdata b/luci-app-netdata/root/etc/uci-defaults/luci-app-netdata new file mode 100644 index 00000000..eb9c7ad8 --- /dev/null +++ b/luci-app-netdata/root/etc/uci-defaults/luci-app-netdata @@ -0,0 +1,30 @@ +#!/bin/sh +[ ! -f "/usr/share/ucitrack/luci-app-netdata.json" ] && { + cat > /usr/share/ucitrack/luci-app-netdata.json << EEOF +{ + "config": "netdata", + "init": "netdata" +} +EEOF +} +# [ -f /usr/share/netdata/webcn/netdata.conf ] && mv -f /usr/share/netdata/webcn/netdata.conf /etc/netdata/netdata.conf +[ -f /usr/share/netdata/webcn/netdata.config ] && mv -f /usr/share/netdata/webcn/netdata.config /etc/config/netdata +[ -f /usr/share/netdata/webcn/netdata.init ] && mv -f /usr/share/netdata/webcn/netdata.init /etc/init.d/netdata + +chmod +x /etc/init.d/netdata + +[ -f "/etc/config/ucitrack" ] && { +uci -q batch <<-EOF >/dev/null + delete ucitrack.@netdata[-1] + add ucitrack netdata + set ucitrack.@netdata[-1].init=netdata + commit ucitrack +EOF +} + +rm -f /tmp/luci-indexcache* 2>/dev/null +rm -f /tmp/luci-modulecache/* 2>/dev/null # OpenWrt 21.02 +rm -f /tmp/luci-indexcache + +rm -rf /tmp/luci-* +exit 0 \ No newline at end of file diff --git a/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json b/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json index ba3a6ed6..7658c23b 100644 --- a/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json +++ b/luci-app-netdata/root/usr/share/luci/menu.d/luci-app-netdata.json @@ -12,26 +12,26 @@ }, "admin/status/netdata/netdata": { "title": "Netdata", - "order": 1, + "order": 10, "action": { "type": "view", - "path": "netdata/main" + "path": "netdata/netdata" + } + }, + "admin/status/netdata/basic": { + "title": "Basic Setting", + "order": 20, + "action": { + "type": "view", + "path": "netdata/basic" } }, "admin/status/netdata/config": { - "title": "Config", - "order": 2, + "title": "Config Setting", + "order": 30, "action": { "type": "view", "path": "netdata/config" } - }, - "admin/status/netdata/advanced": { - "title": "Advanced", - "order": 3, - "action": { - "type": "view", - "path": "netdata/advanced" - } } } diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf new file mode 100644 index 00000000..28131f6d --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.conf @@ -0,0 +1,33 @@ +# Full configuration can be retrieved from the running +# server at http://localhost:19999/netdata.conf +# +# Example: +# curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf +# + +[global] + update every = 2 + memory deduplication (ksm) = no + debug log = none + error log = none + access log = none + run as user = root + +[web] + default port = 19999 + allow connections from = * + allow dashboard from = * + +[plugins] + cgroups = no + apps = no + charts.d = no + fping = no + node.d = no + python.d = no + +[health] + enabled = no + +[plugin:proc:ipc] + shared memory totals = no diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.config b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.config new file mode 100644 index 00000000..2db1811b --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.config @@ -0,0 +1,3 @@ +config netdata 'netdata' + option enabled '0' + option port '19999' \ No newline at end of file diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init new file mode 100644 index 00000000..f2db196e --- /dev/null +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init @@ -0,0 +1,105 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 + +APPBINARY=/usr/sbin/netdata +CONFIGFILE=/etc/netdata/netdata.conf + +config_load 'netdata' + +get_config() { + config_get_bool enabled $1 enabled 0 + config_get port $1 port 19999 + config_get_bool ssl $1 enable_ssl 0 + config_get cert_file $1 cert_file '/etc/ssl/ezopwrt.crt' + config_get key_file $1 key_file '/etc/ssl/ezopwrt.key' + config_get_bool ennginx $1 nginx_support 0 + config_get_bool auth $1 auth 0 + config_get userpw $1 user_passwd 'admin:$apr1$t7qQjoqb$YBHtAb7VGSkjIdObMG.Oy0' + [ "$ennginx" == "1" ] && ssl=0 +} + +#read_option