开源报表工具适合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应用程序。 这个过程很简单:




Java开源报表引擎有哪些_linux


如果需要,可以使用可配置的参数将部署过程自动化。

入门

开发从安装示例应用程序开始 。 这样就建立了开发环境; 您从Hello World开始,然后从那里构建应用程序。

该示例应用程序还可以用作冒烟测试,因为它具有许多测试各种Cloudgizer功能的代码段。 它还为您提供了大量示例代码(因此而得名)。

开始时要注意两个文件:

  • cld_handle_request.v是处理传入请求(例如GETPOST或命令行执行)的位置。
  • sourcelist列出了所有源代码,以便Cloudgizer可以制作您的应用程序。

除了cld_handle_request.voops.v实现了错误处理程序,而file_too_large.v实现了对过大上传的响应。 这些已在示例应用程序中实现,您可以保持它们不变或对其进行调整。

使用cldbuild重新编译源文件( .v )更改,然后使用cldpackapp创建安装程序文件以通过cldgoapp进行测试或发布:


Java开源报表引擎有哪些_python_02


通过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则代码将添加一个股票行情指示器;如果showshow ,则显示所有股票行情指示器。

#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就像使用没有问题的流行脚本语言一样。

翻译自: https://opensource.com/article/18/8/cloudgizer-intro

开源报表工具适合web开发