开源报表工具适合web开发
Cloudgizer是用于构建Web应用程序的免费开源工具。 它结合了脚本语言的易用性和C的性能,有助于管理云应用程序的开发工作和运行时资源。
Cloudgizer可在具有Apache Web服务器和MariaDB数据库的 Red Hat / CentOS Linux上运行。 它是根据Apache许可证版本2许可的 。
你好,世界
在此示例中,我们输出一个HTTP标头和Hello World,然后输出一条水平线:
#include "cld.h"
void home
(
)
{
/*<
output-http-header
Hello World!
<hr/>
>*/
}
Cloudgizer代码以C注释形式编写,分别在开始和结尾处带有/*<
和>*/
。
将输出写入Web客户端就像在源代码中直接编写HTML代码一样简单。 对此没有API调用或特殊标记-简单性很好,因为HTML(或JavaScript , CSS等)可能会构成代码的很大一部分。
这个怎么运作
Cloudgizer源文件(扩展名为.v )通过cld命令行工具转换为C代码。 然后,将C代码编译并与Web服务器链接,即可使用您的应用程序。 例如,如果您想检查一下,名为home.v
的源文件的生成代码将是__home.c
。
您的大部分代码都将被编写为“标记”,这是直观和描述性代码的小片段,可让您轻松地执行以下操作:
- 数据库查询
- 网络编程
- 编码和加密
- 执行程序
- 安全的字符串操作
- 文件操作
- 发送电子邮件
和其他常见任务。 对于不太常见的任务,有一个API涵盖了更广泛的功能。 最终,您可以编写任何C代码并使用任何想要完成任务的库。
main()
函数由Cloudgizer生成,并且是框架的一部分,该框架提供Apache和数据库集成以及其他服务。 一种这样的服务是跟踪和调试(包括内存垃圾收集,承保/覆盖检测,运行时HTML linting等)。 程序崩溃将产生包括源代码行在内的完整堆栈,崩溃报告会在发生时立即通过电子邮件发送给您。
Cloudgizer应用程序在预叉配置中作为Apache模块与Apache服务器链接。 这意味着Apache Web服务器将预分叉多个进程并将传入的请求定向到它们。 Apache模块机制为应用程序提供了高性能的请求处理。
所有Cloudgizer应用程序都在同一Linux用户下运行,每个应用程序都在其自己的应用程序目录下分开。 该用户也是Apache用户。 即,运行Web服务器的用户。
每个应用程序都有其自己的数据库,其名称与该应用程序的名称匹配。 Cloudgizer建立并维护请求之间的数据库连接,从而提高性能。
开发过程
编译源代码和构建安装文件的过程是自动化的。 通过使用cldpackapp
脚本,您可以将代码转换为纯C代码并创建安装文件( .tar.gz文件 )。 最终用户将在名为appinfo
的配置文件的帮助下安装此文件,从而生成一个有效的Web应用程序。 这个过程很简单:
如果需要,可以使用可配置的参数将部署过程自动化。
入门
开发从安装示例应用程序开始 。 这样就建立了开发环境; 您从Hello World开始,然后从那里构建应用程序。
该示例应用程序还可以用作冒烟测试,因为它具有许多测试各种Cloudgizer功能的代码段。 它还为您提供了大量示例代码(因此而得名)。
开始时要注意两个文件:
-
cld_handle_request.v
是处理传入请求(例如GET
,POST
或命令行执行)的位置。 -
sourcelist
列出了所有源代码,以便Cloudgizer可以制作您的应用程序。
除了cld_handle_request.v
, oops.v
实现了错误处理程序,而file_too_large.v
实现了对过大上传的响应。 这些已在示例应用程序中实现,您可以保持它们不变或对其进行调整。
使用cldbuild
重新编译源文件( .v
)更改,然后使用cldpackapp
创建安装程序文件以通过cldgoapp
进行测试或发布:
通过cldgoapp
部署可让您从头开始安装应用程序或从一个版本更新到另一个版本。
例
这是一个股票行情自动收录器应用程序,可更新和报告股票行情价格。 它包含在示例应用程序中。
代码
请求处理程序检查URL查询参数页面,如果它是stock
,则调用function stock()
:
#include "cld.h"
void cld_handle_request
(
)
{
/*<
input-param page
if-string page="stock"
c stock ();
else
report-error "Unrecognized page %s", page
end-if
>*/
}
函数stock()
将在文件stock.v
。 如果URL查询参数操作为add
则代码将添加一个股票行情指示器;如果show
为show
,则显示所有股票行情指示器。
#include "cld.h"
void stock
(
)
{
/*<
output-http-header
<html>
<body>
input-param action
if-string action="add"
input-param stock_name
input-param stock_price
run-query#add_data = "insert into stock \
(stock_name, stock_price) values \
(<?stock_name?>, <?stock_price?>) \
on duplicate key update \
stock_price=<?stock_price?>"
query-result#add_data, error as \
define err
if atoi(err) != 0
report-error "Cannot update \
stock price, error [%s]",err
end-if
end-query
<div>
Stock price updated!
</div>
else-if-string action="show"
<table>
<tr>
<td>Stock name</td>
<td>Stock price</td>
</tr>
run-query#show_data = "select stock_name, \
stock_price from stock"
<tr>
<td>
query-result#show_data, stock_name
</td>
<td>
query-result#show_data, stock_price
</td>
</tr>
end-query
</table>
else
<div>Unrecognized request!</div>
end-if
</body>
</html>
>*/
}
数据库表
使用SQL表为:
create table stock
( stock_name varchar
(
100
) primary key
, stock_price bigint
)
;
制作和包装
要将stock.v
包含在Cloudgizer应用程序中,只需将其添加到源列表文件中:
SOURCE_FILES
= stock.
v ....
...
stock .
o
: stock.
v $
( CLDINCLUDE
)
/ cld.
h $
( HEADER_FILES
)
...
要重新编译对代码的更改,请使用:
cldbuild
cldbuild
要打包您的应用程序以进行部署,请使用:
cldpackapp
cldpackapp
打包应用程序时,您创建的所有其他对象(源代码文件除外)都应包含在create.sh
文件中。 该文件设置了Cloudgizer应用程序安装程序不执行的所有操作; 在这种情况下,请创建上面SQL表。 例如,您的create.sh
的以下代码可能就足够了:
echo - e "drop table if exists stock; \n create table stock (stock_name varchar(100) primary key, stock_price bigint);" | mysql - u root - p$CLD_DB_ROOT_PWD - D $CLD_APP_NAME
echo - e "drop table if exists stock; \n create table stock (stock_name varchar(100) primary key, stock_price bigint);" | mysql - u root - p$CLD_DB_ROOT_PWD - D $CLD_APP_NAME
在create.sh
,可以使用appinfo
文件(安装配置文件)中的任何变量。 这些变量始终包括CLD_DB_ROOT_PWD
(root密码数据库,为了安全CLD_APP_NAME
,该密码始终在安装后自动清除), CLD_APP_NAME
(应用程序和数据库名称), CLD_SERVER
(安装服务器的URL), CLD_EMAIL
(管理和通知电子邮件地址) , 和别的。 您还具有CLD_APP_HOME_DIR
(应用程序的主目录)和CLD_APP_INSTALL_DIR
(已解压缩安装.tar.gz文件的位置,以便可以从中复制文件)。 您可以在appinfo
文件中包含其他有用的变量。
使用应用程序
如果您的应用程序名称是在myserver.com上运行的“ myapp”,则用于更新股票行情收录器的URL将为:
https://myserver.com/go.myapp?page=stock&action=add&stock_name=RHT&stock_price=500
https://myserver.com/go.myapp?page=stock&action=add&stock_name=RHT&stock_price=500
用于显示所有股票报价器的URL为:
https://myserver.com/go.myapp?page=stock&action=show
https://myserver.com/go.myapp?page=stock&action=show
(所有Cloudgizer应用程序的URL路径始终以go.开头;在这种情况下,为go.myapp 。)
下载和更多示例
有关更多示例或下载和安装详细信息,请访问https://dasoftver.bitbucket.io/cloudgizer/ 。 您还将在安装中找到上述示例(请参见示例应用程序源代码 )。
对于更大的真实示例,请查看Rentomy的源代码 , Rentomy是一个免费的开放式开源云应用程序,用于出租物业经理,完全由Cloudgizer编写,包含32,000多行代码。
为什么要使用Cloudgizer?
这就是Rentomy用Cloudgizer编写的原因:
最初,目标是使用一种流行的脚本语言或处理 Java之类的虚拟机 ,并免费将Rentomy托管为软件即服务 (Saas)。
由于仅在美国就有近5000万出租单元,因此像这样的免费服务需要出色的软件性能。
因此,从CPU压缩更多功率并使用更少的RAM变得非常重要。 随着摩尔定律的放慢 ,流行的网络语言的膨胀正在消耗更多的计算资源-我们正在谈论的是过程虚拟机,解释器, p代码生成器等。
调试可能会很痛苦,因为在您与实际发生的事情之间存在更多的抽象层。 并非每个库都可以轻松使用,因此仍然存在一些功能和互操作性限制。
另一方面,就高性能和占用空间而言,C是没有匹配的。出于相同的原因,大多数库都是用C编写的,因此实际上您需要的任何库都可用,并且调试很简单。
但是,C在内存和总体安全性(覆盖,覆盖,垃圾回收等),可用性(低级),应用程序打包等方面存在问题。同样重要的是,许多开发成本在于易用性编写和调试代码以及对新手的访问。
从这个角度来看,Cloudgizer诞生了。 更高的性能和更小的占地面积意味着更便宜的计算能力。 简单,稳定的编码将Zen引入了开发过程,同时也使其能够更好地进行管理。
事后看来,使用Cloudgizer构建Rentomy就像使用没有问题的流行脚本语言一样。
开源报表工具适合web开发